题解的思路是首先创建一个m x n的矩阵,初始化所有元素为-1。然后定义四个变量t, b, l, r分别表示矩阵的上边界、下边界、左边界和右边界。通过一个while循环,按螺旋顺序逐个填充矩阵。每填充完一圈(或矩阵的一部分),就相应地更新边界变量(例如填充完顶部一行后,t自增)。循环每次检查链表是否还有节点,如果没有,即提前返回矩阵。否则,继续填充直到链表耗尽。
时间复杂度: O(max(L, m * n))
空间复杂度: O(m * n)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def spiralMatrix(self, m: int, n: int, head: Optional[ListNode]) -> List[List[int]]:
res = [[-1] * n for _ in range(m)] # 创建结果矩阵并初始化为-1
t, b, l, r = 0, m - 1, 0, n - 1 # 初始化上下左右边界
current = head # 开始的链表节点
while current: # 只要链表还有节点
for i in range(l, r + 1): # 从左到右填充上边界
if not current: # 如果链表节点用完,直接返回结果
return res
res[t][i] = current.val # 赋值
current = current.next # 移动链表节点
t += 1 # 向内移动上边界
for j in range(t, b + 1): # 从上到下填充右边界
if not current:
return res
res[j][r] = current.val
current = current.next
r -= 1 # 向内移动右边界
for i in range(r, l - 1, -1): # 从右到左填充下边界
if not current:
return res
res[b][i] = current.val
current = current.next
b -= 1 # 向内移动下边界
for j in range(b, t - 1, -1): # 从下到上填充左边界
if not current:
return res
res[j][l] = current.val
current = current.next
l += 1 # 向内移动左边界
return res # 返回最终结果矩阵