class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int>ret;
if (matrix.empty())return ret;
int m = matrix.size();
int n = matrix[0].size();
if (m == 1 && n == 1)return { 1 };
int top = 0, down = m - 1, l = 0, r = n - 1;
int i = 0, k = 0, j = 0;
if (m == 0)return ret;
while (i < m*n) {
k = l;
while (i < m*n&&k <=r) {
ret.push_back(matrix[top][k]);
k++;
i++;
}
top++;
j = top;
while (i < m*n&&j <= down) {
ret.push_back(matrix[j][r]);
j++;
i++;
}
r--;
k = r;
while (i < m*n&&k >=l) {
ret.push_back(matrix[down][k]);
k--;
i++;
}
down--;
j = down;
while (i < m*n&&j >= top) {
ret.push_back(matrix[j][l]);
j--;
i++;
}
l++;
}
return ret;
}
};其实可以通过设置游标k,j,通过限制上下左右来进行遍历即可

京公网安备 11010502036488号