สมมติว่าเรามีจำนวนเต็มบวก n เราต้องสร้างเมทริกซ์สี่เหลี่ยมจัตุรัสที่มีองค์ประกอบ n² เรียงตามลำดับเกลียว (spiral order) ตัวอย่างเช่น ถ้า n = 4 เมทริกซ์จะเป็นดังนี้:
| 1 | 2 | 3 | 4 |
| 12 | 13 | 14 | 5 |
| 11 | 16 | 15 | 6 |
| 10 | 9 | 8 | 7 |
ขั้นตอนการทำงาน
- กำหนด
(row1, col1) := (0, 0)และ(row2, col2) := (n, n)สร้างเมทริกซ์resเติมด้วย 0 ตั้งค่าnum := 1 - วนลูป
while num <= n²:- วน
iจากcol1ถึงcol2-1: กำหนดres[row1][i] = numเพิ่มnumทีละ 1 - วน
iจากrow1+1ถึงrow2-1: กำหนดres[i][col2-1] = numเพิ่มnum - วน
iจากcol2-2ลงถึงcol1: กำหนดres[row2-1][i] = numเพิ่มnum - วน
iจากrow2-2ลงถึงrow1+1: กำหนดres[i][col1] = numเพิ่มnum - เพิ่ม
row1ลดrow2เพิ่มcol1ลดcol2
- วน
- คืนค่า
res
ตัวอย่างโค้ด
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))
อินพุต
4
เอาต์พุต
[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]