leetcode 59 螺旋矩陣2 Java 用時較短
阿新 • • 發佈:2018-12-21
題目:
給定一個正整數 n,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。
示例:
輸入: 3
輸出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路:
每次設定矩陣的最外層的值,賦值完成後,再將矩陣裡面的一層視為新的最外層,然後繼續賦值。保證每次賦的值都是在遞增。
說的可能不清楚,請看程式碼!!
程式碼:
//59.螺旋矩陣2 public int cur = 1;//當前值 public int[][] generateMatrix(int n) { cur = 1; int[][] m = new int[n][n]; for(int i =0, j=n-1 ; i<=j; i++, j--) { // System.out.println(String.format("i是:%d, j是:%d", i,j)); setMatrixBoundaryValue(m, i, i,j, j);//設定由這兩個點組成的一個矩陣的最外層的值 } return m; } //設定由這兩個點組成的一個矩陣的最外層的值 public void setMatrixBoundaryValue(int[][] m, int strX, int strY, int endX, int endY) { if(strX == endX) {//最後如果只剩一個數了 m[strX][strY] = cur++; return; } for(int j = strY; j<endY; j++) //注意不走到底,防止有重複資料 m[strX][j] = cur++; for(int i = strX; i<endX; i++) m[i][endY] = cur++; for(int j = endY; j>strY; j--) m[endX][j] = cur++; for(int i = endX; i>strX; i--) m[i][strY] = cur++; }
用時2ms,和用時1ms的答案範例很相似,不同是賦值最外層時的具體賦值過程不同