【leetcode】59. 螺旋矩阵 II(spiral-matrix-ii)(模拟)[中等]

链接

https://leetcode-cn.com/problems/spiral-matrix-ii/

耗时

解题:7 min
题解:11 min

题意

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

提示:

  • 1 <= n <= 20

思路

【leetcode】54. 螺旋矩阵(spiral-matrix)(模拟)[中等] 的思路完全相同,两题的区别基本只有把 54 的输入变成的输出,然后矩阵还简化成了方阵,更简单了,在 54 的代码基础上改改就可以了。

设置一个变量从 1 加到 n 2 n^2 n2。对于这个变量来说:

从外向内一圈一圈往里走,把每一圈看成一个循环结,一圈包括 上、右、下、左 四个部分,分别遍历赋值,需要注意的是当只有一行或一列时,需要特殊判断一下只遍历 上 或 右 就可以了,再多遍历,位置平行的部分就重复了。还有第一部分要遍历整个一行,否则的话只有一个元素时就不会遍历它。

时间复杂度: O ( n 2 ) O(n^2) O(n2)

AC代码

class Solution {
    
    
public:
    vector<vector<int>> generateMatrix(int n) {
    
    
        vector<vector<int>> matrix(n, vector<int>(n, 0));
        int cnt = (n+1)/2;
        int num = 0;
        for(int i = 0; i < cnt; ++i) {
    
    
            for(int j = i; j <= n-i-1; ++j) {
    
    
                matrix[i][j] = ++num;
            }
            for(int j = i+1; j <= n-i-1; ++j) {
    
    
                matrix[j][n-i-1] = ++num;
            }
            if(n-2*i > 1) {
    
    
                for(int j = n-i-2; j >= i; --j) {
    
    
                    matrix[n-i-1][j] = ++num;
                }
                for(int j = n-i-2; j > i; --j) {
    
    
                    matrix[j][i] = ++num;
                }
            }
        }
        return matrix;
    }
};

猜你喜欢

转载自blog.csdn.net/Krone_/article/details/114867081