Leetcode演算法Java全解答--59. 螺旋矩陣 II
阿新 • • 發佈:2018-12-26
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