Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình in các phần tử ma trận theo thứ tự xoắn ốc trong python

Giả sử chúng ta có một mat ma trận 2D. Chúng ta phải in các phần tử ma trận theo cách xoắn ốc. Lúc đầu, bắt đầu từ hàng đầu tiên (mat [0, 0]), in toàn bộ nội dung rồi theo cột cuối cùng để in, sau đó đến hàng cuối cùng, v.v., do đó nó in các phần tử theo kiểu xoắn ốc.

Vì vậy, nếu đầu vào giống như

7
10
9
2
9
1
6
2
3
9
1
4
2
7
5
9
9
11

thì đầu ra sẽ là [7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau:

  • d:=0
  • top:=0, down:=số hàng của ma trận - 1, left:=0, right:=số cột của ma trận - 1
  • c:=0
  • res:=một danh sách mới
  • hướng:=0
  • trong khi trên cùng <=xuống và trái <=phải, thực hiện
    • nếu hướng giống 0, thì
      • đối với tôi trong phạm vi từ trái sang phải + 1, thực hiện
        • chèn ma trận [top, i] vào res
      • top:=top + 1
    • nếu hướng giống như 1, thì
      • đối với tôi trong phạm vi từ trên xuống + 1, thực hiện
        • chèn ma trận [i, right] vào res
      • right:=right - 1
    • nếu hướng giống như 2, thì
      • đối với tôi trong phạm vi từ phải sang trái - 1, giảm đi 1, thực hiện
        • chèn ma trận [down, i] vào res
      • xuống:=xuống - 1
    • nếu hướng giống như 3, thì
      • đối với tôi trong phạm vi giảm xuống đầu trang - 1, giảm đi 1, thực hiện
        • chèn ma trận [i, left] vào res
      • left:=left + 1
  • hướng:=(hướng + 1) mod 4
  • trả lại res

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn:

Ví dụ

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))

Đầu vào

[    
[7, 10, 9],    

[2, 9, 1],    

[6, 2, 3],    

[9, 1, 4],    

[2, 7, 5],    

[9, 9, 11]

]

Đầu ra

[7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]