力扣 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;
    }
};
经验分享 程序员 微信小程序 职场和发展