java实现螺旋矩阵

本文介绍了如何使用Java编程实现螺旋矩阵,重点讨论了奇偶阶矩阵的区别和填充规律,并提供了详细的代码示例。
摘要由CSDN通过智能技术生成

螺旋矩阵

螺旋矩阵是蛇形矩阵的一个变种
将1-N2自然数以顺时针或逆时针填入一个N阶方阵
解决这个问题的第一个小问题就是N的奇偶问题
例如 一个四阶方阵以顺时针填入的时候需要两圈
在这里插入图片描述
一个五阶方阵以顺时针填入的时候需要两圈,还剩一个芯
在这里插入图片描述

所以,奇数阶方阵比偶数阶方程多一个芯

那么我们把这个芯去掉之后,奇数阶方阵和偶数阶方阵有什么区别呢?

好像没有了。

这就是奇偶合并

一般碰到分奇偶的问题首先要考虑的就是奇偶合并。

这样的话无论奇数还是偶数方阵的圈数是N/2,这个就不说了。

根据这个东西我们可以写出来一个循环
for(loop=0;loop<N/2;++loop){
}

接下来观察这个六阶方阵
在这里插入图片描述

首先看最上面一行1~5为上
再看最右面的一行6~10为右
接着看最下面的一行11~15为下
最后看最左面的一行16~20为左
这样第一圈的划分就出来了
至于为什么这么划分,每一部分都是5个数,保持了一致性
在编写代码的时候会容易一些

接下来我们找这个方阵的规律
设横坐标为i,纵坐标为j;
第一圈

i:0
j:0~n-2(因为N为阶数是不可变的,所以我取n=N)

i:0~n-2
j:n-1

i:n-1
j:n-1~1

i:n-1~1
j:0

第二圈

i:1
j:1~n-3

i:1~n-3
j:n-2

i:n-2
j:n-2~2

i:n-2~2
j:1

第三圈

i:2
j:1~n-4

i:2~n-4
j:n-3

i:n-3
j:n-3~3

i:n-3~3
j:2

每一圈的起始位置为对角线上点例如(0,0)(1,1)
我们可以发现这些点的i和j是相同的
而i又和loop相同,所以,我们可以把它改为
第一圈

i:loop
j:i~n-2

i:loop~n-2
j:n-i

n-1
j:n-1~loop+1

i:n-1~loop+1
j:loop

第二圈
同上

第三圈
同上

只要把可以用loop表示的都用lo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值