标签:++ res 复杂 etc while循环 方向 相对 spi mat
题目核心是矩阵遍历。以前做过类似的题,不过是正方形的情况。我都是由外向内,层一个for循环,四个方向一个for循环,坐标计算相对复杂。
换一种思路,记矩阵左上角坐标(i1,j1),右下角(i2,j2)。一个大的while循环,按照四个方向遍历,缩小矩阵。其实思路和之前一样,只不过规避掉了坐标繁琐的计算。
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; if (matrix.size()==0) return res; int i1=0, i2=matrix.size()-1; int j1=0, j2=matrix[0].size()-1; while (i1<=i2 && j1<=j2){ for (int j=j1;j<=j2;++j) res.push_back(matrix[i1][j]); for (int i=i1+1;i<=i2;++i) res.push_back(matrix[i][j2]); if (i1<i2){ //如果不判断,只有一行的情况会重复输出 for (int j=j2-1;j>=j1;--j) res.push_back(matrix[i2][j]); } if (j1<j2){ for (int i=i2-1;i>=i1+1;--i) res.push_back(matrix[i][j1]); } ++i1; ++j1; --i2; --j2; } return res; } };
标签:++ res 复杂 etc while循环 方向 相对 spi mat
原文地址:https://www.cnblogs.com/hankunyan/p/9127515.html