螺旋矩阵C++

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

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if(matrix.empty() || matrix[0].empty())
            return {};
        int m = matrix.size(); // 行数
        int n = matrix[0].size(); // 列数
        vector<int> res;
        int up=0, down=m-1, left=0, right=n-1;
        // 从左到右,从上到下哦,up范围像下缩小,right范围向左缩小
        // 然后从右到左,从下到上,left范围缩小,down向上缩小
        // 当up大于down时或right小于left时,说明已经遍历完
        while(true){
            for(int i=left; i<=right; i++)
                res.push_back(matrix[up][i]);
            if(++up>down)
                break;
            for(int i=up; i<=down; i++)
                res.push_back(matrix[i][right]);
            if(--right<left)
                break;
            for(int i=right; i>=left; i--)
                res.push_back(matrix[down][i]);
            if(--down<up)
                break;
            for(int i=down; i>=up; i--)
                res.push_back(matrix[i][left]);
            if(++left > right)
                break;
        }
        return res;
    }
};

你可能感兴趣的:(乐扣刷题,矩阵,c++,算法)