【力扣】54.螺旋矩阵
AC截图
题目
思路
假如矩阵有m行n列,用一个变量total=m*n记录矩阵元素是否访问完毕。
使用四个变量,rowBegin=0,rowEnd=m-1,colBegin=0,colEnd=n-1记录四个边界,然后按照从左到右、从上到下、从右到左、从下到上依次遍历循环,每次修改边界条件直至遍历结束。
代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
int m=matrix.size();
int n=matrix[0].size();
int rowBegin=0,rowEnd=m-1;
int colBegin=0,colEnd=n-1;
int total=m*n;
while(total>0){
// 从左到右
for(int i=colBegin;i<=colEnd&&total>0;i++){
res.push_back(matrix[rowBegin][i]);
total--;
}
rowBegin++;
// 从下到上
for(int i=rowBegin;i<=rowEnd&&total>0;i++){
res.push_back(matrix[i][colEnd]);
total--;
}
colEnd--;
// 从右到左
for(int i=colEnd;i>=colBegin&&total>0;i--){
res.push_back(matrix[rowEnd][i]);
total--;
}
rowEnd--;
// 从下到上
for(int i=rowEnd;i>=rowBegin&&total>0;i--){
res.push_back(matrix[i][colBegin]);
total--;
}
colBegin++;
}
return res;
}
};