[LeetCode 59] 螺旋矩阵 II

[LeetCode 59] 螺旋矩阵 II

  • 题目描述
    • 源码
    • 改进
    • 改进代码
    • 分析
    • 难点
    • 小结

题目描述

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

示例:

输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]## 题目分析

这道题和螺旋矩阵一样,就是从上右下左的顺序慢慢打印数字,有几个就打印n^2个数字就完事啦

源码

class Solution {
public int[][] generateMatrix(int n) {
    int[][] arr = new int[n][n];
    int c = 1, j = 0;
    while (c <= n * n) {
    
        for (int i = j; i < n - j; i++)
            arr[j][i] = c++;
        for (int i = j + 1; i < n - j; i++)
            arr[i][n - j - 1] = c++;
        for (int i = n - j - 2; i >= j; i--)
            arr[n - j - 1][i] = c++;
        for (int i = n -j - 2; i > j; i--)
            arr[i][j] = c++;

        j++;
    }

    return arr;
}

}

改进

这道题当然也有递归的做法,但是复杂度又点高了,个人相比之下还是喜欢循环,简洁易懂。

改进代码

 class Solution {
 public int[][] generateMatrix(int n) {
    int[][] ans=new int[n][n];
    writeCircle(0,n-1,0,n-1,1,ans);
    return ans;
}

public void writeCircle(int startCol,int endCol,int startRow,int endRow,int st,int[][] ans){
    if(startCol=startCol;j--){
            ans[endRow][j]=st++;
        }
        最左
        for(int i=endRow-1;i>=startRow+1;i--){
            ans[i][startCol]=st++;
        }
        //终止
    }else if(startCol

}

分析

第一个时间复杂度为O(n)
第二个时间复杂度为O(n*m)

难点

这道题还是比较中规中矩的,个人还是选择循环吧,比较容易理解,没有什么难点

小结

最主要的还是把各个点的索引找到,然后慢慢填数进去就行

[1]https://leetcode-cn.com/problems/spiral-matrix-ii/submissions/

你可能感兴趣的:([LeetCode 59] 螺旋矩阵 II)