数组入门练习:螺旋遍历二维数组

本文解析了如何使用螺旋顺序遍历 nn×mm 的二维数组,通过确定环数和环内元素划分,展示了如何拆解并遍历这些环。关键步骤包括确定环数 cnt = ⌈x/2⌉,理解环的四部分结构,并处理边界情况。

NC38 螺旋矩阵

给出一个 n n n m m m 列的二维数组,按螺旋的顺序返回矩阵中的所有元素。

比如,输入为:

[1,2,3]
[4,5,6]
[7,8,9]

输出为:

[1,2,3,6,9,8,7,4,5]

观察上图,螺旋遍历可定义为从左上角开始,按照顺时针方向,从外向内依次遍历所有元素。


如上图示,可将二维数组拆解为若干个环。由外向内的,从左上角开始遍历每一个环,即可完成对整个二维数组的螺旋遍历。特殊的,当行或列为奇数时,位于中心处的“环”只有一行或一列。

接下来,将整个问题拆解为三个步骤:

  • 确定环的数量
  • 确定每个环包含的元素
  • 由外向内遍历每一个环

观察上图,环的数量取决于 n n n m m m 中较小值,不妨设 x = min ⁡ ( n , m ) x=\min(n,m) x=min(n,m),尝试寻找 x x x 和环数 c n t cnt cnt 之间的规律:

  • x = 1 x = 1 x=1 c n t = 1 cnt=1 cnt=1
  • x = 2 x = 2 x=2 c n t = 1 cnt=1 cnt=1
  • x = 3 x = 3 x=3 c n t = 2 cnt=2
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值