力扣 54. 螺旋矩阵(螺旋遍历)
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
push_back的运用: (加在最后一个元素的后面位置)
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector <int> ret;
for (int i = 0; i < 10; i++)
ret.push_back(i + 1);
for (int i = 0; i < 10; i++)
cout <<"ret["<<i<<"]="<< ret[i] <<endl;
}
算法代码(螺旋遍历): 不能再while里写判断条件否则会在m*n(m!=n)中出错
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector <int> ret;
//螺旋遍历的方法
int up=0;//上边界
int down=matrix.size()-1;//下边界
int left=0;//左边界
int right= matrix[0].size()-1;//右边界
while(1){
//不能再while里写判断条件否则可能出错在m*n(m!=n)中
for(int i=left;i<=right;i++)//右移
ret.push_back(matrix[up][i]);
if(++up>down)break;
for(int i=up;i<=down;i++)//下移
ret.push_back(matrix[i][right]);
if(--right<left)break;
for(int i=right;i>=left;i--)//左移
ret.push_back(matrix[down][i]);
if(up>--down)break;
for(int i=down;i>=up;i--)//上移
ret.push_back(matrix[i][left]);
if(right<++left)break;
}
return ret;
}
};
