想法:螺旋矩阵主要在于边界
想法:需要一圈一圈的遍历,一层螺旋套着一层螺旋
阅读后想法:由于存在不同,比如最后一圈可能只需要一行
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size(); // m 行
int n = matrix[0].size(); // n 列
vector<int> ans;
int top = 0; // 行
int left = 0; // 列
int bottom = m-1;
int right = n-1;
while(top<=bottom && left<=right) {
// 从左到右边
for(int j=left;j<=right; j++) {
ans.push_back(matrix[top][j]);
}
// 从上到下
for(int i=top+1;i<=bottom;i++) {
ans.push_back(matrix[i][right]);
}
if(top<bottom && left<right) {
// 从右到左
for(int j=right-1;j>=left;j--) {
ans.push_back(matrix[bottom][j]);
}
// 从下到上
for(int i=bottom-1;i>top;i--) {
ans.push_back(matrix[i][left]);
}
}
top++;
left++;
bottom--;
right--;
}
return ans;
}
};
想法:
a. 注意边界条件
b. 注意区分两种不同条件,一圈包一圈、一圈包一行