假设我们有一个2D矩阵垫。我们必须以螺旋方式打印矩阵元素。首先,从第一行(mat [0,0])开始,先打印整个内容,然后再打印最后一列,然后再打印最后一行,依此类推,从而以螺旋方式打印元素。
所以,如果输入像
7 | 10 | 9 |
2 | 9 | 1 |
6 | 2 | 3 |
9 | 1 | 4 |
2 | 7 | 5 |
9 | 9 | 11 |
那么输出将是[7、10、9、1、3、4、5、11、9、9、2、9、6、2、9、2、1、7]
为了解决这个问题,我们将按照以下步骤操作:
d:= 0
上:= 0,下:=矩阵的行数– 1,左:= 0,右:=矩阵的列数-1
c:= 0
res:=一个新列表
方向:= 0
而顶部<=下和左<=右,
对于范围从下到上-1的i,减少1,执行
左:=左+1
将矩阵[i,左]插入res
因为我在从右到左的范围内-1,减少1,做
下:=下-1
将matrix [down,i]插入res
对于范围从上到下+ 1的i
右:=右-1
将矩阵[i,右]插入res
因为我的范围是从左到右+ 1,
顶部:=顶部+ 1
将矩阵[top,i]插入res
如果方向等于0,则
如果方向与1相同,则
如果方向与2相同,则
如果方向与3相同,则
方向:=(方向+1)mod 4
返回资源
让我们看下面的实现以更好地理解:
class Solution: def solve(self, matrix): d = 0 top = 0 down = len(matrix) - 1 left = 0 right = len(matrix[0]) - 1 c = 0 res = [] direction = 0 while top <= down and left <= right: if direction == 0: for i in range(left, right + 1): res.append(matrix[top][i]) top += 1 if direction == 1: for i in range(top, down + 1): res.append(matrix[i][right]) right -= 1 if direction == 2: for i in range(right, left - 1, -1): res.append(matrix[down][i]) down -= 1 if direction == 3: for i in range(down, top - 1, -1): res.append(matrix[i][left]) left += 1 direction = (direction + 1) % 4 return res ob = Solution()matrix = [ [7, 10, 9], [2, 9, 1], [6, 2, 3], [9, 1, 4], [2, 7, 5], [9, 9, 11] ] print(ob.solve(matrix))
[ [7, 10, 9], [2, 9, 1], [6, 2, 3], [9, 1, 4], [2, 7, 5], [9, 9, 11]]
输出结果
[7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]