leetcode| 59.螺旋矩阵

解法:描述从外圈到内圈上、右、下、左行遍历幅值的过程。

注意规则:行和列遍历时注意制定遍历区间的规则,如n*n矩阵,第一圈第上、右。下、左行、遍历规则为[0,n-1]。

java代码

 public static int[][] generateMatrix(int n){
        int[][] arr = new int[n][n];
        int startX = 0, startY = 0; //每列起始位置.行起始位置
        int rule = 1;//左闭右开
        int count = 1; //矩阵数字
        int loop =1; //圈数
        int i,j;//行、列
        while (loop <= n/2){
            //上行
            for (j=startY; j <n-rule ; j++) {
                arr[startX][j]=count++;
            }
            //i=0,j=1
            //右行
            for (i=startX; i <n-rule; i++) {
                arr[i][j]=count++;
            }
            //i=1,j=2
            //下行
            for (; j > startY ; j--) {
                arr[i][j]=count++;
            }
            //i=2,j=0
            //左行
            for (; i >startX; i--) {
                arr[i][j]=count++;
            }
            //i=1,j=0;
            startX++;
            startY++;
            rule++;
            loop++;
        }
        if(n%2==1){ //奇数时多出的数据
            arr[n/2][n/2]=n*n;
        }
        return arr;
    }

测试奇数

@Test
    public void test5(){
        int n =3;
        System.out.println(Arrays.deepToString(generateMatrix(n)));
    }

结果

[[1, 2, 3], [8, 9, 4], [7, 6, 5]]

测试偶数

@Test
    public void test4(){
        int n =4;
        System.out.println(Arrays.deepToString(generateMatrix(n)));
    }

结果

[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值