leetcode59_螺旋矩阵II

1. 题意

螺旋矩阵I的低配版本,螺旋输出一个矩阵,只不过这个矩阵直接成了方阵。

2. 题解

同样一层一层的分析,有
⌈ R O W S 2 ⌉ = ⌈ C O L S 2 ⌉ = N 2 \lceil \frac{ROWS}{2}\rceil=\lceil \frac{COLS}{2}\rceil =\frac{N}{2} 2ROWS=2COLS=2N
层。
k k k层每个方向需要输出 N + 1 − 2 i N+1-2i N+12i个数。
注意,当 2 ∤ N 2 \nmid N 2N时,我们需要额外输出最中间那个数。

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        
        vector<vector<int>> ans;
        for ( int i = 0;i < n; ++i) {
            vector tmp(n,0);
            ans.push_back(tmp);
        }

        

        int x = 0;
        int y = 0;
        int cnt = 0;
        int steps = n - 1;
        int totSteps = n * n;

        while (steps && cnt < totSteps) {

            int rs = steps;
            while (cnt < totSteps && rs--) {
                ans[x][y] = ++cnt;
                y++;
            }

            int ds = steps;
            while (cnt < totSteps && ds--) {
                ans[x][y] = ++cnt;
                x++;
            }

            int ls = steps;
            while (cnt < totSteps && ls--) {
                ans[x][y] = ++cnt;
                y--;
            }

            int us = steps;
            while (cnt < totSteps && us--) {
                ans[x][y] = ++cnt;
                x--;
            }

            x++;
            y++;
            steps -= 2;
        }
        
        if (0 == steps) {
            ans[x][y] = ++cnt;
        }
       

        return ans;
    }
};