forked from neetcode-gh/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0063-unique-paths-ii.py
More file actions
28 lines (24 loc) · 850 Bytes
/
0063-unique-paths-ii.py
File metadata and controls
28 lines (24 loc) · 850 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution:
def uniquePathsWithObstacles(self, grid: List[List[int]]) -> int:
M, N = len(grid), len(grid[0])
dp = [0] * N
dp[N-1] = 1
# Time: O(N*M), Space: O(N)
for r in reversed(range(M)):
for c in reversed(range(N)):
if grid[r][c]:
dp[c] = 0
elif c + 1 < N:
dp[c] = dp[c] + dp[c + 1]
return dp[0]
# Time: O(N*M), Space: O(N*M)
M, N = len(grid), len(grid[0])
dp = {(M - 1, N - 1): 1}
def dfs(r, c):
if r == M or c == N or grid[r][c]:
return 0
if (r, c) in dp:
return dp[(r, c)]
dp[(r, c)] = dfs(r + 1, c) + dfs(r, c + 1)
return dp[(r, c)]
return dfs(0, 0)