螺旋矩阵
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入
[[1,2,3],[4,5,6],[7,8,9]]
返回值
[1,2,3,6,9,8,7,4,5]
算法思想:由于传入一个二维数组,可以定义四个边界,依次循环走,注意处理边界条件
代码:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int>vec;
if(matrix.size() == 0)return vec;
int up = 0,down = matrix.size()-1,left = 0,right = matrix[0].size()-1;
while(true)
{
for(int i = left;i<=right;++i){vec.push_back(matrix[up][i]);}//左到右的第一行
up++;//跳到下一行
if(up > down)break;//判断
for(int i = up;i<=down;++i){vec.push_back(matrix[i][right]);}//上到下一列
right--;//跳到前一列开始
if(right<left)break;
for(int i = right;i>=left;--i){vec.push_back(matrix[down][i]);}//右到左的一行
down--;//跳到上一行
if(down < up)break;
for(int i = down;i >= up;--i){vec.push_back(matrix[i][left]);}//下到上的一列
left++;//在进入下一次循环
if(left > right)break;
}
return vec;
}
};