C++
首先定义出每个上下左右边界值 然后找到规律即可
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
if(matrix.size()==0){
return {};
}
//定义边界 上下左右
int left = 0,right = matrix[0].size()-1,top = 0,bottom = matrix.size()-1;
//结果数组
vector<int> res(matrix[0].size()*matrix.size());
int x = 0;
while(true){
//从左到右
for(int i=left;i<=right;i++){
res[x++] = matrix[top][i];
}
//第一层遍历完成后 top向下一层
//判断边界条件
if(++top>bottom) break;
//从上到下
for(int i=top;i<=bottom;i++){
res[x++] = matrix[i][right];
}
//最右边遍历完成后,right向左一层
//判断边界条件
if(--right<left) break;
//从右到左
for(int i=right;i>=left;i--){
res[x++] = matrix[bottom][i];
}
//最下边遍历完成后,bottom向上一层
//判断边界条件
if(--bottom<top) break;
//从下到上
for(int i=bottom;i>=top;i--){
res[x++] = matrix[i][left];
}
//最左边遍历完成后,left向右一层
//判断边界条件
if(++left>right) break;
}
return res;
}
};
京公网安备 11010502036488号