python
一、62.不同路径
虽然之前我练过这道题,但是还是有几个细节没注意到
1.核心代码
代码如下(示例):
class Solution:
def uniquePaths(self,m,n):
dp=[[0]*n for _ in range(m)]
for i in range(m):
dp[i][0]=1
for j in range(n):
dp[0][j]=1
for i in range(1,m):
for j in range(1,n):
dp[i][j]=dp[i-1][j]+dp[i][j-1]
return dp[m-1][n-1]
1、还是没有牢记dp的含义,是路径数,在对初始化赋值时,左边一列和上边一行的所有路径数都只能为1,但是我却搞混成了是走的步数,从而赋值错误
2、数组的赋值方式需要学习
2.输入输出
if __name__=="__main__":
m=int(input())
n=int(input())
solution=Solution()
result=solution.uniquePaths(m,n)
print(result)
二、63.不同路径 II
63.不同路径 II
思路:如果遇到障碍,则dp=0
大体是对的,但是我忽略了一个细节,在边界初始化中,如果碰到一个障碍,则之后的都为0
因此,需要加上如果边界初始化碰到1,就直接break,后面就不赋值了
1.核心代码
代码如下(示例):
class Solution:
def uniquePathsWithObstacles(self,obstracledrid):
m = len(obstracledrid)
n = len(obstracledrid[0])
dp=[[0]*n for _ in range(m)]
for i in range(m):
if obstracledrid[i][0] == 0:
dp[i][0]=1
else:
break
for j in range(n):
if obstracledrid[0][j] == 0:
dp[0][j]=1
else:
break
for i in range(1,m):
for j in range(1,n):
if obstracledrid[i][j] == 0:
dp[i][j]=dp[i-1][j]+dp[i][j-1]
return dp[m-1][n-1]
关键部分:
for i in range(m):
if obstracledrid[i][0] == 0:
dp[i][0]=1
else:
break
2.输入输出
if __name__=="__main__":
obstracledrid=eval(input())
solution=Solution()
result=solution.uniquePaths(obstracledrid)
print(result)
总结
输入输出