力扣中國 · #3665
统计镜子反射路径数目(Twisted Mirror Path Count)
使用動態規劃計算鏡子反射路徑數,狀態定義為從左、上進入格子的路徑數,根據障礙物情況轉移狀態。
開啟原題 ↗時間複雜度O(mn)
空間複雜度O(mn)
解釋模型qwen/qwen3.8-27b
解題思路
作者很懶,所以我請 qwen/qwen3.8-27b 來幫他解釋。
此解法使用動態規劃計算從左上角到右下角的路徑數。d[i][j] 儲存兩個值,分別代表從左側和上方進入當前格子的路徑數。根據前一個格子是否有障礙物(值為1),決定是累加前一個格子的所有路徑,還是只累加特定方向的路徑。最後將終點格子的兩個方向路徑數相加並取模。
通過的程式碼
class Solution:
def uniquePaths(self, grid: List[List[int]]) -> int:
n = len(grid[0])
m = len(grid)
d =[ [ [0,0] for __ in range(n)] for _ in range(m)] #l, u
d[0][0] = [1, 1]
for j in range(1, n):
d[0][j][0] = d[0][j-1][0] if grid[0][j-1] != 1 else 0
for i in range(1, m):
d[i][0][1] = d[i-1][0][1] if grid[i-1][0] != 1 else 0
for i in range(1,m):
for j in range(1,n):
# if grid[i][j] ==0:
l = sum(d[i][j-1]) if grid[i][j-1] != 1 else d[i][j-1][1]
u = sum(d[i-1][j]) if grid[i-1][j] != 1 else d[i-1][j][0]
d[i][j][0] = l
d[i][j][1] = u
# else:
# d[i][j][0] = d[i-1][j][1] + d[i][j-1][1]
# d[i][j][1] = d[i-1][j][0] + d[i][j-1][0]
return sum(d[m-1][n-1])% int(1e9 + 7)