【代码随想录|九动态规划p2 62.不同路径,63.不同路径 II】

代码随想录|九动态规划p2 62.不同路径,63.不同路径 II


python

一、62.不同路径

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)

总结

输入输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值