【算法】-- 【螺旋矩阵】

今天去智度科技面试,遇到一个算法题,没有答上,可惜了这次机会。

从矩阵的左上角出发,初始时向右移动;如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1, 2, 3, … , n1,2,3,…,n,便构成了一个螺旋矩阵。2

下图是一个n = 4n=4 时的螺旋矩阵。

在这里插入图片描述
实现算法如下:

 public static void getLuoXuan(int n){
        int[][] arr = new int[n][n];

        int m;  //m表示循环的次数,如果n为偶数的话就循环n/2次,n为奇数的话就循环(n+1)/2次
        if (n%2==0)//n为偶数
            m=n/2;
        else
            m=(n+1)/2;

        int value=1;
        for (int i=0;i<m;i++){

            for (int a=i;a<=n-i-1;a++){    //从左到右
                arr[i][a]=value++;
            }

            for (int b =i+1;b<=n-i-1;b++){//从上到下
                arr[b][n-i-1]=value++;
            }

            for (int c=n-i-2;c>=i;c--){//从右到左
                arr[n-i-1][c]=value++;
            }

            for (int d =n-i-2;d>=i+1;d--){//从下到上
                arr[d][i]=value++;
            }
        }

        for (int i=0;i<n;i++){
            for (int j=0;j<n;j++){
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值