螺旋数组的打印系列汇总

本文详细探讨了螺旋数组(矩阵)的各种遍历方法,包括顺时针、逆时针等,适合算法学习和面试准备。
摘要由CSDN通过智能技术生成
螺旋数组类的题目是面试时常常会碰到的问题,这里针对常见的螺旋数组及其变种做了一个总结,希望能更多地掌握这一类题目的解法。

一般来说,螺旋数组都是由下面的这道题目变化而来。先看下这道基础的原题:

题目描述:
输入一个数字n,输出一个n*n的二维数组,使其按照从外到内,顺时针的格式打印出来。

case:
输入
4

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

这道题目很常见,总的来说可以采用俩种思路来实现。 一是模拟法,空间复杂度是O(n*n);二是找规律法,空间复杂度是O(1)。

思路1:通过模拟螺旋数组的旋转操作,在此过程中不断地给二维数组a[][]的元素a[i][j]赋值,直到二维数组的所有元素都被赋值即可。这个思路需要预先开辟一个二维的数组a[n][n],占用的空间复杂度是O(n*n);

思路2:通过分析螺旋二维数组的特点,找到每个元素a[i][j]和n之间的关系,从而直接在打印二维数组的每个元素时,直接计算出该元素的值,将其打印出来,因此无需预先开辟一个数组,空间复杂度降低到O(1)。

下面来实现这两种算法:

思路1:首先我们将二维数组看成是一个坐标轴,坐标原点是对应着元素的下标(0, 0),X轴的正方向向右,Y轴的正方向向下。实现思路1时,又有两种方法:
一种是通过控制边界的方法即通过控制X轴和Y轴的起始边界beginX,endX,beginY,endY,来模拟数组元素的螺旋赋值操作;

另外一种是通过移动坐标(x, y)的方法,即通过每次进行(y++,x++,y--,x--)这四个操作中的任何一个来模拟螺旋赋值操作,这种方法在应用到变种问题由内向外打印螺旋数组时也很方便。

思路1-1:控制边界法,空间复杂度O(n*n)
初始化最外面一层的边界: 
beginX = 0; 
endX = n - 1; 
beginY = 0; 
endY = n - 1;
此后不断增加beginX和begi
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值