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; jstrY; j--) 
			m[endX][j] = cur++;
		for(int i = endX; i>strX; i--) 
			m[i][strY] = cur++;
	}

用时2ms,和用时1ms的答案范例很相似,不同是赋值最外层时的具体赋值过程不同
leetcode 59 螺旋矩阵2 Java 用时较短_第1张图片

你可能感兴趣的:(Leetcode)