leecoode59螺旋矩阵——带有调试代码

我的题解

关键就是如何去找这个循环,如何去遍历,我刚开始想到了以圈来进行遍历
但是问题是我并没有想到是四个循环分别是遍历四条边
我想的是通过一个循环来四条边,i=1的时候遍历第一条边,然后i=2的时候遍历第二条边...
上面的也能做出来,但是你会发现这个完全是没必要的,因为你要通过if语句来进行判断这个循环是哪一条边
if(k==1){
    for(i=circle,j=circle;j<n-1-circle;j++){
        arr[i][j]=num++;        //对其进行赋值
    }
}
if(k==2){
    for(i=circle;i<n-1-circle;i++){
        arr[i][j]=num++;
    }  
}
...类似这种,完全没必要
class Solution {
    public int[][] generateMatrix(int n) {
        //暴力解法
        //首先肯定是要进行遍历好n^2次
        int[][] arr = new int[n][n];
        int circle = 0;
        int i=0,j=0;
        int num=1;
        while(circle<n/2){
            //定义四个循环,然后每个循环处理一条边
            for(i=circle,j=circle;j<n-1-circle;j++){
                arr[i][j]=num++;        //对其进行赋值
            }
            for(i=circle;i<n-1-circle;i++){
                arr[i][j]=num++;
            }
            for(j=n-1-circle;j>circle;j--){
                arr[i][j]=num++;
            }
            for(i=n-circle-1;i>circle;i--){
                arr[i][j]=num++;
            }
            circle++;//圈数加一
        }
        if(n%2==1){
            arr[n/2][n/2]=num;
        }
        return arr;
    }
}

完整代码带有测试代码

public class 螺旋矩阵 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入这个n");
        int n= input.nextInt();
        int [][] arr = generateMatrix(n);
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                System.out.print(arr[i][j]+" ");;
            }
            System.out.println();
        }
        input.close();
    }

    public static int[][] generateMatrix(int n) {
        //暴力解法
        //首先肯定是要进行遍历好n^2次
        int[][] arr = new int[n][n];
        int circle = 0;
        int i=0,j=0;
        int num=1;
        while(circle<n/2){
            //定义四个循环,然后每个循环处理一条边
            for(i=circle,j=circle;j<n-1-circle;j++){
                arr[i][j]=num++;        //对其进行赋值
            }
            for(i=circle;i<n-1-circle;i++){
                arr[i][j]=num++;
            }
            for(j=n-1-circle;j>circle;j--){
                arr[i][j]=num++;
            }
            for(i=n-circle-1;i>circle;i--){
                arr[i][j]=num++;
            }
            circle++;//圈数加一
        }
        if(n%2==1){
            arr[n/2][n/2]=num;
        }
        return arr;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值