用java解决回形填数的面试题

刚开始学JAVA,遇到一面试题感觉有点意思,费劲吧啦几的给做出来了。

输入一个数字n,输出n阶回型矩阵

例如:输入5

输出

1     2    3   4  5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

分析思路:

回型填数最外圈的值依次是递增的,所以我们可以从最外圈赋值

1.从最上面一行开始正向赋值 ,即二维数组的行不变,列递增,赋值递增。

2.从最右面一列开始正向赋值 ,即二维数组的列不变,行递增,赋值递增,注意:这时总行数-1,起始位置从第二行开始。

3.从最下面一行反向赋值 ,即二维数组的行不变,列递减,赋值递增,注意:这时总列数-1,起始位置从倒数第二列开始。

4.从最左面一列反向赋值 ,即二维数组的列不变,行递减,赋值递增,注意:这时总行数-1,起始位置从倒数第二行开始。

依次进行,一圈一圈知道完成结果。

public class Interview2 {
    public static void main(String[] args) {
        System.out.println("请输入一个数字");
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int[][] arr = new int[a][a];
        int lMax = arr.length;
        int cMax = arr[0].length;
        int value = 0;
        int l = 0, m = 0;
        while (0 < cMax && 0 < lMax) {
            for (int n = 0; n < cMax; n++) {
                arr[l][m] = ++value;
                m++;
            }
            lMax--;
            for (int n = 0; n < lMax; n++) {
                arr[l + 1][m - 1] = ++value;
                l++;
            }
            cMax--;
            for (int n = 0; n < cMax; n++) {
                arr[l][m - 2] = ++value;
                m--;
            }
            lMax--;
            for (int n = 0; n < lMax; n++) {
                arr[l - 1][m - 1] = ++value;
                l--;
            }
            cMax--;
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值