
自己做
解:螺旋遍历

class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size(); //行数
int n = matrix[0].size(); //列数
int sum = m * n; //总数m * n
int top = 0; //上边界
int bottom = m - 1; //下边界
int left = 0; //左边界
int right = n - 1; //右边界
vector<int> res; //存放结果
int i = 0;
while (1) {
//==========================从左往右,抵达右边界前,向右遍历==========================
for (int j = left; j <= right; j++) {
res.push_back(matrix[top][j]);
i++;
}
top++; //上边界往下压
//一条线走完判断是否已经遍历完了整个矩阵
if (i == sum)
break;
//==========================从上往下,抵达下边界前,向下遍历==========================
for (int j = top; j <= bottom; j++) {
res.push_back(matrix[j][right]);
i++;
}
right--; //右边界往左移
//一条线走完判断是否已经遍历完了整个矩阵
if (i == sum)
break;
//==========================从右往左,抵达左边界前,向左遍历==========================
for (int j = right; j >= left; j--) {
res.push_back(matrix[bottom][j]);
i++;
}
bottom--; //下边界往上抬
//一条线走完判断是否已经遍历完了整个矩阵
if (i == sum)
break;
//==========================从下往上,抵达上边界前,向上遍历==========================
for (int j = bottom; j >= top; j--) {
res.push_back(matrix[j][left]);
i++;
}
left++; //左边界往右动
//一条线走完判断是否已经遍历完了整个矩阵
if (i == sum)
break;
}
return res;
}
};
