1. 程式人生 > >leetcode 59 螺旋矩陣2 Java 用時較短

leetcode 59 螺旋矩陣2 Java 用時較短

題目:

給定一個正整數 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的答案範例很相似,不同是賦值最外層時的具體賦值過程不同
在這裡插入圖片描述