给你一个 m
行 n
列的矩阵 matrix
,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
对于这种螺旋遍历的方法,重要的是要确定上下左右四条边的位置,初始化的时候,上边up就是0,下边down就是m-1,左边left是0,右边right是n-1。然后我们进行while循环,先遍历上边,将所有元素加入结果res,然后上边下移一位,如果此时上边大于下边,说明此时已经遍历完成了,直接break。在这里我们可以设置一个指南针,边界找找规律不难推理。就是变量多了一些。
代码展示:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
int size = m*n;
int num = 0;
std::vector<int> res;
int i = 0;
int j = 0;
bool N = false;
bool S = false;
bool W = false;
bool E = true;
while(num < size) {
res.push_back(matrix[i][j]);
num++;
if (N) {
if (i == j + 1) {
N = false;
E = true;
j++;
} else {
i--;
}
} else if (S) {
if (i == m - n + j ) {
S = false;
W = true;
j--;
} else {
i++;
}
} else if (W) {
if (i == m - j - 1) {
W = false;
N = true;
i--;
} else {
j--;
}
} else if (E) {
if (j == n - i - 1) {
E = false;
S = true;
i++;
} else {
j++;
}
}
}
return res;
}
};
数字媒体技术202 潘ZY