LeetCode:螺旋矩陣||【59】
阿新 • • 發佈:2018-11-02
LeetCode:螺旋矩陣||【59】
題目描述
給定一個正整數 n,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。
示例:
輸入: 3 輸出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
題目分析
這道題難度也是中等,是那道噁心題的衍生版,但是說實話難度小於1,且已經明示一定是正方形矩陣。我們直接改一下1的程式碼就可以了!並且效率是非常高的!
這道題簡直也喪心病狂☺!我們採用的方式是一圈一圈賦值!
答案將是從第一個外層按順時針順序填寫所有元素,然後是第二個外層的元素,依此類推
我們首先定義四個元素,r1,r2,c1,c2,這將框定一個範圍,我們順時針賦值這個範圍邊上的值,每次賦值以後再次縮小框。
好的問題來了?
1.要賦值幾個框?
times=Math.min(長,寬)%2==0?Math.min(長,寬)/2:Math.min(長,寬)/2+1;
2.順時針賦值的橫縱座標變化規律?如圖所示有顏色是要賦值的框
Java題解
public class SpiralMatrixII_59 { public int[][] generateMatrix(int n) { int[][] arr = new int[n][n]; int c1 = 0; int c2 = n-1; int r1 = 0; int r2 = n-1; int count =1 ; int times = Math.min(n,n)%2==0?Math.min(n,n)/2:Math.min(n,n)/2+1; for(int i=0;i<times;i++) { for (int c = c1; c <= c2; c++) arr[r1][c]=count++; for (int r = r1 + 1; r <= r2; r++) arr[r][c2]=count++; if (r1 < r2 && c1 < c2) { for (int c = c2 - 1; c > c1; c--) arr[r2][c]=count++; for (int r = r2; r > r1; r--) arr[r][c1]=count++; } r1++; r2--; c1++; c2--; } return arr; } }