62. 不同路径
1. first idea
dp[row][col]表示从(0,0)到(row,col)位置共有多少条路径。
dp[:][1]=dp[1][:]=1.
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
dp = [[0] * n] * m
for row in range(m):
dp[row][0] = 1
for col in range(1, n):
dp[0][col] = 1
for row in range(1, m):
for col in range(1, n):
dp[row][col] = dp[row - 1][col] + dp[row][col - 1]
return dp[-1][-1]
63. 不同路径 II
1. first idea
这个跟上一题应该没有太大区别,无非是有石头导致一些位置不能有路径。
那就把对应位置的dp[row][col]置为0.
其他位置应该不影响。
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
row_n = len(obstacleGrid)
col_n = len(obstacleGrid[0])
dp = [[0] * col_n for _ in range(row_n)]
for row_idx in range(row_n):
if obstacleGrid[row_idx][0] == 0:
dp[row_idx][0] = 1
else:
break
for col_idx in range(col_n):
if obstacleGrid[0][col_idx] == 0:
dp[0][col_idx] = 1
else:
break
for row_idx in range(1, row_n):
for col_idx in range(1, col_n):
if obstacleGrid[row_idx][col_idx] == 1:
dp[row_idx][col_idx] = 0
else:
dp[row_idx][col_idx] = dp[row_idx - 1][col_idx] + dp[row_idx][col_idx - 1]
return dp[-1][-1]
实现的过程中我发现,再给上边和左边赋初值时,如果遇到障碍物,后面的都应该是0,而非1.