目录
学习目标
- 62.不同路径
- 63. 不同路径 II
学习内容
62.不同路径
62. 不同路径 - 力扣(LeetCode)https://leetcode.cn/problems/unique-paths/
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
@cache
def dfs(m,n):
if m==1 or n==1:
return 1
return dfs(m-1,n)+dfs(m,n-1)
return dfs(m,n)
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
if m==1 or n==1:
return 1
f = [[1]*(n)for _ in range(m)]
for i in range(1,m):
for j in range(1,n):
f[i][j] = f[i-1][j]+f[i][j-1]
return f[-1][-1]
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
if m==1 or n==1:
return 1
f = [1]*n
for i in range(1,m):
for j in range(1,n):
f[j]+=f[j-1]
return f[-1]
63. 不同路径 II
63. 不同路径 II - 力扣(LeetCode)https://leetcode.cn/problems/unique-paths-ii/
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
m = len(obstacleGrid)
n = len(obstacleGrid[0])
@cache
def dfs(m,n):
if obstacleGrid[m-1][n-1]==1:
return 0
if m==1 and n==1:return 1
if m==1:
return dfs(m,n-1)
if n==1:
return dfs(m-1,n)
return dfs(m-1,n)+dfs(m,n-1)
return dfs(m,n)
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
m = len(obstacleGrid)
n = len(obstacleGrid[0])
f = [[0]*n for _ in range(m)]
for i in range(m):
for j in range(n):
if obstacleGrid[i][j]==1:
f[i][j]=0
else:
if i==0 and j==0:
f[i][j] = 1
elif i==0:
f[i][j] = f[i][j-1]
elif j==0:
f[i][j] = f[i-1][j]
else:
f[i][j] = f[i-1][j]+f[i][j-1]
return f[-1][-1]