螺旋数组生成的详解

螺旋数组生成的详解

最近想起螺旋数组输出的问题,是当时在大学c语言里的一个课后作业,上网找了答案之后,就交了,至今没弄懂,现在重新思考还是越想越乱,到最后还是放弃了;参考网上大佬的算法,看完之后重写了一遍,并将过程记录在代码中详细说明如何生成。
问题描述:生成任意大小的二维数顺时针螺旋组,例如:

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

思路:

  1. 从最外层逐层填充数组,依次从上、右、下、左四个方向填充;
  2. 运用递归的方法,填完每一层;
  3. 递归的出口是填完所有的数据;有三种情况:
  • 要填的边长都为0
  • 要填的行为1;
  • 要填的列为1;

注意:

  • 数组的下标范围,防止出现覆盖或者越界;
  • 填写数组时的方向;
  • 填写中的变量和不变量;
  • 填写时局部和整体的关系;

数组边界坐标

代码详解

/**
 * 打印回环数组
 */
public class spiralArray {
   
    public static void main(String[] args) {
   
        int m=4;//行数
        int n=5;//列数
        int[][] arr=new int[m][n];
        fillArray(arr,m,n,0,0);
        printArray(arr,m,n);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值