※ 引述《enmeitiryous (enmeitiryous)》之銘言:
: 題目: 2326. Spiral matrix IV
: 給你一個Link list,指定整數m,n請將Link list中的值從0,0的位置開始順時針螺旋的
: 填入m*n的2D vector中,不足者全填-1
: 思路:
: 照做,可以先用兩組vector紀錄x,y的移動慣例方向,當填完數字後看更新後的x,y loc
: 有沒有超出0-n-1, 0-m-1的範圍或是碰到ans[y][x]!=-1的格子,如果有的話則復原重新
: 換方向更新,beat70%以上有蠻多新做法來完成這個動作,可以多參考
思路:
差不多 找邊界照著做 只是寫得自己覺得很魔幻
Python Code:
class Solution:
def spiralMatrix(self, m: int, n: int, head: Optional[ListNode]) -> List[List[int]]:
idx = x = y = 0
matrix = [[-1] * n for _ in range(m)]
min_x, min_y, max_x, max_y = -1, -1, n, m
while head:
if matrix[y][x] == -1:
matrix[y][x] = head.val
head = head.next
match idx:
case 0:
x += 1
if x >= max_x:
x -= 1
y += 1
idx = (idx + 1) % 4
min_y += 1
case 1:
y += 1
if y >= max_y:
y -= 1
x -= 1
idx = (idx + 1) % 4
max_x -= 1
case 2:
x -= 1
if x <= min_x:
x += 1
y -= 1
idx = (idx + 1) % 4
max_y -= 1
case 3:
y -= 1
if y <= min_y:
y += 1
x += 1
idx = (idx + 1) % 4
min_x += 1
return matrix
也可以用 if 可以少一個縮排
不過想說第一次通過是用 match 就不換了 640 ms / 54.59 MB