力扣 54. 螺旋矩阵(螺旋遍历)

力扣 54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

力扣 54. 螺旋矩阵(螺旋遍历)_第1张图片
力扣 54. 螺旋矩阵(螺旋遍历)_第2张图片
push_back的运用:
(加在最后一个元素的后面位置)

#include
#include
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;

}

力扣 54. 螺旋矩阵(螺旋遍历)_第3张图片
算法代码(螺旋遍历):
不能再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;
    }
};

你可能感兴趣的:(算法,矩阵,leetcode,c++)