1、题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
链接:https://leetcode-cn.com/problems/spiral-matrix/
2、思路分析
1)按层模拟
限定了i的活动返回,按层模拟四次。
第一次是上方横行模拟,第二次右方竖行面膜泥,第三次下方横行模拟,第四次左方竖行模拟。
但是在进行第三次和第四次的时候,需要进行判断,如果还满足r1 <= r2 & c1 <= c2 ,则继续将其写入到数组中。每次写入一行或一列之后,需要更新行或列。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> ans; // 需要返回的数组
int m = matrix.size(); // m行
int n = matrix[0].size(); // n列
int r1 = 0, r2 = m - 1; // 上下下标
int c1 = 0, c2 = n - 1; // 左右下标
while(c1 <= c2 && r1 <= r2){
for(int i = c1; i <= c2; ++i){
ans.push_back(matrix[r1][i]); }
r1++;
for(int i = r1; i <= r2; ++i){
ans.push_back(matrix[i][c2]);
}
c2--;
if(c1 <= c2 && r1 <= r2){
for(int i = c2; i >= c1; --i){
ans.push_back(matrix[r2][i]);
}
r2--;
for(int i = r2; i >= r1; --i){
ans.push_back(matrix[i][c1]); }
c1++;
}
}
return ans;
}
};