[力扣 Hot100]Day19 螺旋矩阵

题目描述

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
[力扣 Hot100]Day19 螺旋矩阵_第1张图片

出处

思路

用递归做,先输出最外层(顶行右列底行左列),再递归输出内层矩阵,对矩阵宽或高为1时进行特判并返回、

代码

class Solution {
private:
    void order(vector<vector<int>>& matrix, vector<int>& res,int x1,int y1,int x2,int y2){
        int w=x2-x1+1;
        int h=y2-y1+1;
        if(w==0||h==0) return;
        if(w==1){
            for(int i=y1; i<=y2; i++)
                res.push_back(matrix[i][x1]);
            return;
        }
        if(h==1){
            for(int i=x1; i<=x2; i++)
                res.push_back(matrix[y1][i]);
            return;
        }
        for(int i=x1; i<x2; i++)//top
            res.push_back(matrix[y1][i]);
        for(int i=y1; i<y2; i++)//right
            res.push_back(matrix[i][x2]);
        for(int i=x2; i>x1; i--)//bottom
            res.push_back(matrix[y2][i]);
        for(int i=y2; i>y1; i--)//left
            res.push_back(matrix[i][x1]);
        order(matrix,res,++x1,++y1,--x2,--y2);
    }
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> result;
        int m=matrix.size();
        int n=matrix[0].size();
        order(matrix, result,0,0,n-1,m-1);
        return result;
    }
};

你可能感兴趣的:(力扣Hot100题,leetcode,矩阵,算法)