1.回形遍历
2.对角线遍历(leetcode 498. Diagonal Traverse)
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector<int> res;
int m = matrix.size();
if(m==0)
return res;
int n = matrix[0].size();
int x=0,y=0;
res.push_back(matrix[x][y]);
for(int i=0;i<m+n-2;i++)
{
if(i%2!=0)
{
while(y>0&&x<m-1)
res.push_back(matrix[++x][--y]);
if(x<m-1)
res.push_back(matrix[++x][y]);
else
res.push_back(matrix[x][++y]);
}
else
{
while(y<n-1&&x>0)
res.push_back(matrix[--x][++y]);
if(y<n-1)
res.push_back(matrix[x][++y]);
else
res.push_back(matrix[++x][y]);
}
}
return res;
}
};
注意最后一次循环必须不要,因为每次循环会将下一次循环的起始点添加进vector中,所以倒数第二次循环已经将最后一次的起始点(也是最后一次唯一的一个点)加入到vector中了,如果进行最后一次循环,就会再添加一个越界的点到数组中,造成数组越界。