【Java数组算法:“回形矩阵”的生成】

Java数组算法:“回形矩阵”的生成

问题介入

从键盘输入一个整数(1~20)

则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。

例如: 输入数字2,则程序输出:

1 2
4 3

输入数字3,则程序输出:

1 2 3
8 9 4
7 6 5

输入数字4, 则程序输出:

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

问题分析

从n=3开始分析,发现有如下规律:
赋值(从小到大)的方向依次是右、下、左、上
在这里插入图片描述
可以看成几轮“右、下、左、上”的赋值来形成回形矩阵:
第一轮从 arr[0][0] 开始,第二轮从 arr[1][1] 开始……
轮数与矩阵的大小n有关,若n为偶数则需要 n / 2 轮,否则需要
n / 2 + 1

具体赋值一轮右、下、左、上的代码如下:

            // 向右赋值   start表示从哪个位置开始赋值,即arr[start][start]  val是所要赋的数值
            for (int i = start, j = start; j < arr.length - start; j++, val++) {
                arr[i][j] = val;
            }
           // 向下赋值  列不变,行递增
            for (int j = arr.length - 1 - start, i = start + 1;  i < arr.length - start; i++, val++) {
                arr[i][j] = val;
            }
           // 向左赋值  行不变,列递减
            for (int i = arr.length - 1 - start, j = arr.length - 2 - start; j >= start; j--, val++) {
                arr[i][j] = val;
            }
           // 向上赋值  列不变,行递减
            for (int j = start, i = arr.length - 2  -start; i > start; i--, val++) {
                arr[i][j] = val;
            }

注意:若条件边界不清晰,可以先以某个具体矩阵写死条件代码,然后根据具体矩阵n的大小来进行修改

完整代码如下

        // 回形矩阵的大小
        int dimension = 10;
        int[][] arr 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值