题目描述
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入:
[[1,2,3],[4,5,6],[7,8,9]]
返回值:
[1,2,3,6,9,8,7,4,5]
解题思路
1.分析传入的矩阵
2.考虑传入的矩阵为空的情况
利用vector的特性,对整个vector和其中嵌套的vector进行判空,若为空返回一个{}
if(matrix.empty()||matrix[0].empty())return{};
3.一般情况
定义数组的大小,考虑到需要返回的类型是vector所以建立一个result用作存储需要返回的结果。
int height=matrix.size();
int width=matrix[0].size();
vector<int>result;
int up=0,down=height-1;
int left=0,right=width-1;
完整代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
if(matrix.empty()||matrix[0].empty())return{};
int height=matrix.size();
int width=matrix[0].size();
vector<int>result;
int up=0,down=height-1;
int left=0,right=width-1;
while(true)
{
//从左往右
for(int j=left;j<=right;j++)
result.push_back(matrix[up][j]);
if(++up>down)//上面大于下面
break;
//从右上往右下
for(int i=up;i<=down;i++)
result.push_back(matrix[i][right]);
if(--right<left) break;//右边小于左边
//从右下到左下
for(int j=right;j>=left;j--)
result.push_back(matrix[down][j]);
if(--down<up) break; //下边小于上面
//从左下到左上
for(int i=down;i>=up;i--)
result.push_back(matrix[i][left]);
if(++left>right)//左边超过了右边
break;
}
return result;
}
};