# Leetcode 63. Unique Paths II ## 題解 ### 動態規劃 ```python! class Solution: def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: # DFS # Time complexity: O(m*n) # Space complexity: O(m*n) m,n = len(obstacleGrid),len(obstacleGrid[0]) grid = [[0] * n for i in range(m)] for y in range(m): if obstacleGrid[y][0] == 1: break grid[y][0] = 1 for x in range(n): if obstacleGrid[0][x] == 1: break grid[0][x] = 1 for y in range(1,m): for x in range(1,n): if obstacleGrid[y][x] == 0: grid[y][x] = grid[y-1][x] + grid[y][x-1] return grid[m-1][n-1] ``` ### 滾動數組 ```python! class Solution: def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: # DFS # Time complexity: O(m*n) # Space complexity: O(m*n) m,n = len(obstacleGrid),len(obstacleGrid[0]) grid = [0 for i in range(n)] grid[0] = 1 if obstacleGrid[0][0] == 0 else 0 for y in range(m): for x in range(n): if obstacleGrid[y][x] == 1: grid[x] = 0 continue if x - 1 >= 0 and obstacleGrid[y][x-1] == 0: grid[x] += grid[x - 1] return grid[n-1] ```