为了能到远方,脚下的每一步都不能少.|

TranquilGlow

园龄:2年7个月粉丝:1关注:0

2023-07-16 19:05阅读: 8评论: 0推荐: 0

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;
    }
}

本文作者:TranquilGlow

本文链接:https://www.cnblogs.com/xuehaiqiule/p/17621632.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   TranquilGlow  阅读(8)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起