※ 引述《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