1. 程式人生 > >Leetcode演算法Java全解答--59. 螺旋矩陣 II

Leetcode演算法Java全解答--59. 螺旋矩陣 II

Leetcode演算法Java全解答–59. 螺旋矩陣 II

文章目錄

題目

給定一個正整數 n,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。

示例:



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


想法

每一層都是這個順序(紅綠藍紫),數值雖然不對,但是思路是這樣。
在這裡插入圖片描述
在這裡插入圖片描述
第一層迴圈
第一次:123345,
第二次:6789,
第三次:10 11 12 13
第四次:14 15 16
第二層迴圈
第一次:17 18 19
。。。

結果

// TODO

總結

// TODO

程式碼

我的答案

public class Solution {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];
        int num=1, d=n-1, x=(n-d)/2, y=(n-d)/2;
        while (d > 0) {
            for(int i=0; i<d; i++) res[x][y+i] = num++;  //①
            y += d;
            for(int i=0; i<d; i++) res[x+i][y] = num++;  //②
            x += d;
            for(int i=0; i<d; i++) res[x][y-i] = num++;  //③
            y = (n-d) / 2;
            for(int i=0; i<d; i++) res[x-i][y] = num++;  //④
            d -= 2;
            x = (n-d) / 2;
            y = (n-d) / 2;
        }
        if (d==0) res[x][y] = num;  //⑤
        return res;
    }
}

大佬們的答案

class Solution {
    public int[][] generateMatrix(int n) {
    int[][] res =new int[n][n];
    int t=1;
    int a=0,b=0;
    int i=0,j=0;
    for(;i>=a&&i<n&&j>=b&&j<n;a++,b++,n--){
    for(;j<n;j++)
        res[i][j]=t++;
    for(i++,j--;i<n;i++)
        res[i][j]=t++;
    for(i--,j--;j>=b&&i>a;j--)
        res[i][j]=t++;
    for(j++,i--;i>a&&j>=b;i--)
        res[i][j]=t++;
    i=a+1;
    j=b+1;
    }
    return res;
    }
}

測試用例


其他

程式碼託管碼雲地址:https://gitee.com/lizhaoandroid/LeetCodeAll.git

檢視其他內容可以點選專欄或者我的部落格哈:https://blog.csdn.net/cmqwan

“大佬們的答案” 標籤來自leetcode,侵權請聯絡我進行刪改

如有疑問請聯絡,聯絡方式:QQ3060507060