leetcode:54. 螺旋矩阵(中等,数组)

题目:

leetcode:54. 螺旋矩阵(中等,数组)_第1张图片

分析:

leetcode:54. 螺旋矩阵(中等,数组)_第2张图片
不断这样,直到出现特殊情况,我认为的特殊情况是:没有下一个,只剩一个,只剩一行,只剩一列

代码:

class Solution {
     
public:
    vector<int> v;
    void f(vector<vector<int>>& matrix,int min_x,int min_y,int max_x,int max_y)
    {
     
        if(min_x>max_x||min_y>max_y) return;
        if(min_x==max_x&&max_y==min_y)
        {
     
            v.push_back(matrix[min_x][min_y]);
            return;
        }
        if(min_x==max_x)
        {
     
            for(int i=min_y;i<=max_y;i++) v.push_back(matrix[max_x][i]);
            return;
        }
        if(min_y==max_y)
        {
     
            for(int i=min_x;i<=max_x;i++) v.push_back(matrix[i][min_y]);
            return;
        }
        //行
        for(int i=min_y;i<=max_y;i++)
        {
     
            v.push_back(matrix[min_x][i]);
        }
        //列
        for(int i=min_x+1;i<=max_x;i++)
        {
     
            v.push_back(matrix[i][max_y]);
        }
        //行
        for(int i=max_y-1;i>=min_y;i--)
        {
     
            v.push_back(matrix[max_x][i]);
        }
        //列
        for(int i=max_x-1;i>min_x;i--)
        {
     
            v.push_back(matrix[i][min_y]);
        }
        
        f(matrix,min_x+1,min_y+1,max_x-1,max_y-1);
    }
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
     
        if(matrix.size()==0) return v;
        f(matrix,0,0,matrix.size()-1,matrix[0].size()-1);
        return v;
    }
};

结果:

leetcode:54. 螺旋矩阵(中等,数组)_第3张图片

你可能感兴趣的:(数组)