要点:
- 4层循环:
i. 第一次从左->右
ii. 第二次从上->下
iii. 第三次从右->左
xi. 第四次从下到上
vector<int> spiralOrder(vector<vector<int>>& matrix)
{
vector<vector<int>> mat;
// 基本情况
if (arr.size() == 0) {
return mat;
}
// 构造一个 `M × N` 矩阵
mat.resize(N, vector<int>(M));
int top = 0, bottom = M - 1;
int left = 0, right = N - 1;
int index = 0;
while (1)
{
if (left > right) {
break;
}
// 打印第一行
for (int i = left; i <= right; i++) {
mat[top][i] = arr[index++];
}
top++;
if (top > bottom) {
break;
}
// 打印右列
for (int i = top; i <= bottom; i++) {
mat[i][right] = arr[index++];
}
right--;
if (left > right) {
break;
}
//打印底行
for (int i = right; i >= left; i--) {
mat[bottom][i] = arr[index++];
}
bottom--;
if (top > bottom) {
break;
}
//打印左列
for (int i = bottom; i >= top; i--) {
mat[i][left] = arr[index++];
}
left++;
}
}