leetcode#59 spiral matrixs Ⅱ

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例:

输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) 
    {
        if(n==0) return {};
        vector<vector<int>> matrix(n,vector<int>(n));
        spiralOrder(matrix,0,0,matrix.size(),matrix[0].size(),1);//不错,我们嚣张到名字都不改
        return matrix;
        
    }
    
    
    void spiralOrder(vector<vector<int>>& matrix,int x,int y,int n,int m,int num) //从长宽为n的矩阵的x,y坐标开始放置长宽为m的部分
    {
        if (m<=0 || n<=0) return;
        if (m == 1 || n == 1)
        {
            for (int i = 0; i != m; ++i)
                for (int j = 0; j != n; ++j)
                    matrix[x + i][y + j]=num++;
            return;
        }
        for (int i = 0; i<n; ++i)
            matrix[x + 0][y + i]=num++;
        for (int i = 1; i<m - 1; ++i)
            matrix[x + i][y + n - 1]=num++;
        for (int i = n - 1; i >= 0; --i)
            matrix[x + m - 1][y + i]=num++;
        for (int i = m - 2; i > 0; --i)
            matrix[x + i][y + 0]=num++;
        m -= 2;
        n -= 2;
        spiralOrder(matrix,x + 1, y + 1, m, n,num);
    }
};

猜你喜欢

转载自www.cnblogs.com/lsaejn/p/9758204.html