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

Ma trận xoắn ốc II bằng Python

Giả sử chúng ta có một số nguyên dương n, chúng ta phải tạo một ma trận vuông với n2 phần tử theo thứ tự xoắn ốc. Vì vậy, nếu n =5, thì ma trận sẽ là -

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

Hãy để chúng tôi xem các bước -

  • set (row1, col1):=(0, 0) and (row2, col2):=(n, n), và tạo một ma trận được gọi là res, sau đó điền vào nó bằng các số 0 và đặt num:=1
  • while num <=n2,
    • cho tôi trong phạm vi col1 đến col2,
      • res [row1, i] =num, incase num bằng 1
      • nếu num> n2, thì ngắt
    • cho tôi trong dải ô row1 + 1 đến row2,
      • res [i, col2-1] =num, incase num bằng 1
      • nếu num> n2, thì ngắt
    • cho tôi trong phạm vi col2 - 2 xuống col1 - 1,
      • res [row2 - 1, i] =num, incase num bằng 1
      • nếu num> n2, thì ngắt
    • cho tôi trong dải ô row2 - 2 xuống row1,
      • res [i, col1] =num, incase num bằng 1
    • tăng hàng1 lên 1, giảm hàng2 đi 1, tăng col1 lên 1 và giảm col2 đi 1
  • 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(object):
   def generateMatrix(self, n):
      row1 = 0
      col1 = 0
      row2 = n
      col2 = n
      result = [ [0 for i in range(n)] for j in range(n)]
      num = 1
      while num<=n**2:
         for i in range(col1,col2):
            result[row1][i] = num
            num+=1
         if num > n**2:
            break
         for i in range(row1+1,row2):
            result[i][col2-1] = num
            num+=1
         if num > n**2:
            break
         for i in range(col2-2,col1-1,-1):
            result[row2-1][i] = num
            num+=1
         if num > n**2:
            break
         for i in range(row2-2,row1,-1):
            result[i][col1] = num
            num+=1
            row1+=1
            row2-=1
            col1+=1
            col2-=1
            #print(result)
      return result
ob1 = Solution()
print(ob1.generateMatrix(4))

Đầu vào

4

Đầu ra

[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]