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的答案范例很相似,不同是赋值最外层时的具体赋值过程不同
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值