今日学习记录
1. 对角线遍历leetcode.498
关键词:矩阵 模拟
问题分析:
- 就是简单模拟遍历对角线元素,别被矩阵中的元素大小迷惑就行
核心思路
- 就是简单遍历呗,从右上角开始计层数,对角线元素下标和相同,奇数层从左往右遍历,偶数层从右往左遍历就完了
**最终代码:
vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
vector<int> arr;
int r = mat.size();
if(r==0) return arr;
int c = mat[0].size();
if(c==0) return arr;
bool flage = true;
for(int i = 0;i<r+c;i++){
int xr = flage?r:c;
int yr= flage?c:r;
int x = (i<xr)?i:xr-1;
int y = i-x;
while(x>=0&&y<yr){
arr.push_back(flage?mat[x][y]:mat[y][x]);
x--;
y++;
}
flage = !flage;
}
return arr;
}学到的点:
- 简单
2. Cantor 表洛谷-p1014
关键词: 问题分析:
- 就是简单模拟,后来想到了第一时间没思路就再做一遍
核心思路
- 找到对应数所在的层数,再找到是从右边开始找还是从左边开始找,奇数从左,偶数从右
最终代码:
int main(){
int n;cin>>n;
int len = 0;
while(len*(len+1)/2<n) len++;
len--;
int m = n - len*(len+1)/2;
len++;
if(len%2==0) cout<<m<<"/"<<len-m+1;
else cout<<len-m+1<<"/"<<m;
return 0;
}学到的点: 1.