方法一模拟
这是一种比较暴力的方法,大家可以模拟人类读取二维数组的方法,从左到右,从上到下,从右到左,从下到上,以此类推,以下是代码实现
atrix)otatrix []
res = []atrixatrix[0]) = 0, cols – 1, 0, rows – 1dge(left, right + 1)datrix[top][col])ge + 1)datrix[row][right])dge(right – 1, left – 1, -1)datrix][col])ge – 1, top, -1)datrix[row][left]) – 1 res
方法二递归
递归是一种比较巧妙的方法,大家可以将整个二维数组看成由一层层的圈组成,然后每次递归遍历一圈,以下是代码实现
atrix)otatrix []atrixatrix[0])atrix.pop(0)
if rows >1ge(rows – 1)datrix[i].pop())
if cols >1atrix.pop()[-1]ge(rows – 2, 0, -1)datrix[i].pop(0))atrixgeatrixatrix[i]]) res
方法三迭代器
迭代器是一种比较简洁的方法,大家可以将整个二维数组看成由一层层的圈组成,然后每次遍历一圈,以下是代码实现
class SpiralIteratoritatrix)atrixatrix
self.row, self.col = 0, -1s = [(0, 1), (1, 0), (0, -1), (-1, 0)]
def __iter__(self) self
ext__(self)s
r, c = self.row + dr, self.col + dcatrixdatrixdatrixote
self.row, self.col = r, catrix[self.row][self.col]atrixe
atrix)otatrix []atrix))
以上是三种常用的方法来实现顺时针遍历二维数组。不同的方法各有优缺点,大家可以根据实际情况选择合适的方法。