class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>res;
spiralOrder(matrix, res);
return res;
}
void spiralOrder(vector<vector<int>>&matrix, vector<int>&res) {
if (matrix.size() <= 0 || matrix[0].size() <= 0) {
return;
}
int start = 0;
while (matrix[0].size() > start * 2 && matrix.size() > start * 2) {
spiralOrderCore(matrix, start, res);
start++;
}
}
void spiralOrderCore(vector<vector<int>>&matrix, int start, vector<int>&res) {
// 终止列号
int endC = matrix[0].size() - start - 1;
// 终止行号
int endR = matrix.size() - start - 1;
//从左到右打印一行
for (int i = start; i <= endC; i++) {
res.push_back(matrix[start][i]);
}
//从上到下打印一列
if (endR > start) {
for (int i = start + 1; i <= endR; i++) {
res.push_back(matrix[i][endC]);
}
}
// 从右到左打印一行
if (endR > start && endC > start) {
for (int i = endC - 1; i >= start; i--) {
res.push_back(matrix[endR][i]);
}
}
//从下到上打印一列
if (endR - 1 > start && endC > start) {
for (int i = endR - 1; i > start; i--) {
res.push_back(matrix[i][start]);
}
}
}
};
54-螺旋矩阵(顺时针打印矩阵)
最新推荐文章于 2022-05-10 19:02:12 发布