力扣中國 · #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)