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
- cho tôi trong phạm vi col1 đến col2,
- 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]]