Python程序:螺旋顺序打印矩阵元素


假设我们有一个二维矩阵mat。我们需要以螺旋的方式打印矩阵元素。首先从第一行(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
  • top := 0, down := 矩阵的行数 – 1, left := 0, right := 矩阵的列数 - 1
  • c := 0
  • res := 一个新的列表
  • direction := 0
  • 当 top <= down 且 left <= right 时,执行以下操作
    • 如果 direction 等于 0,则
      • 对于 i 从 left 到 right + 1,执行以下操作
        • 将 matrix[top, i] 插入 res
      • top := top + 1
    • 如果 direction 等于 1,则
      • 对于 i 从 top 到 down + 1,执行以下操作
        • 将 matrix[i, right] 插入 res
      • right := right - 1
    • 如果 direction 等于 2,则
      • 对于 i 从 right 到 left - 1,递减 1,执行以下操作
        • 将 matrix[down, i] 插入 res
      • down := down - 1
    • 如果 direction 等于 3,则
      • 对于 i 从 down 到 top - 1,递减 1,执行以下操作
        • 将 matrix[i, left] 插入 res
      • left := left + 1
  • direction :=(direction + 1) mod 4
  • 返回 res

让我们看看以下实现,以便更好地理解

示例

在线演示

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]

更新于: 2020年11月26日

2K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告