一、题目描述

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

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

Leetcode No.59 螺旋矩阵 II_空间复杂度

示例 2:
输入:n = 1
输出:[[1]]

提示:
1 <= n <= 20

二、解题思路

整体采用构建矩阵,填充矩阵的思路,填充过程分为四种情况:

从左到右填充一行
从上到下填充一列
从右到左填充一行
从下到上填充一列

三、代码

public class Solution {
    public int[][] generateMatrix(int n) {
        int[][] rs = new int[n][n];
        int k=0;
        int m=1;
        int i,j;
        while(k<n/2){
            for(j=k;j<n-k;j++){
                rs[k][j]=m++;
            }
            for(i=k+1,j--;i<n-k;i++){
                rs[i][j]=m++;
            }
            for(i--,j--;j>k;j--){
                rs[i][j]=m++;
            }
            for(;i>k;i--){
                rs[i][j]=m++;
            }
            k++;
        }
        if(n%2==1){
            rs[n/2][n/2]=m++;
        }
        return rs;
    }

    public static void main(String[] args) {
        Solution solution=new Solution();
        int n=3;
        int[][] rs=solution.generateMatrix(n);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.print(rs[i][j]);
                System.out.print(",");
            }
            System.out.println();
        }
    }
}

四、复杂度分析

时间复杂度:O(n^2),其中 n 是给定的正整数。矩阵的大小是n×n,需要填入矩阵中的每个元素。

空间复杂度:O(1),除了返回的矩阵以外,空间复杂度是常数。

欢迎关注微信公众号【算法攻城师】

Leetcode No.59 螺旋矩阵 II_微信公众号_02