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 n^2 phần tử theo thứ tự xoắn ốc. Ví dụ, nếu n = 4, ma trận sẽ là:
| 1 | 2 | 3 | 4 |
| 12 | 13 | 14 | 5 |
| 11 | 16 | 15 | 6 |
| 10 | 9 | 8 | 7 |
Các bước thực hiện
- Thiết lập
(row1, col1) := (0, 0)và(row2, col2) := (n, n), tạo ma trậnresđiền bằng 0, đặtnum := 1. - Khi
num <= n^2:- Với
itừcol1đếncol2 - 1: gánres[row1][i] = num, tăngnum. Nếunum > n^2thì dừng. - Với
itừrow1 + 1đếnrow2 - 1: gánres[i][col2-1] = num, tăngnum. Nếunum > n^2thì dừng. - Với
itừcol2 - 2giảm xuốngcol1: gánres[row2-1][i] = num, tăngnum. Nếunum > n^2thì dừng. - Với
itừrow2 - 2giảm xuốngrow1 + 1: gánres[i][col1] = num, tăngnum. - Tăng
row1, giảmrow2, tăngcol1, giảmcol2.
- Với
- Trả về
res.
Ví dụ minh họa
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
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]]