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;}
};