LeetCode62-Unique Paths In Python

本文探讨了机器人在坐标格子中从左上角到右下角的路径规划问题,对比了递归与动态规划两种方法。递归方法虽直观但效率低下,而动态规划通过累积路径数,有效解决了路径规划问题,实现高效求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本题给了一个坐标格子,要求机器人从地图的左上角移动到右下角,每次只能向右或者向下移动一个格子,求一共有多少路径可以到达右下角。

解题:看到路径规划,第一反应是用递归的方法。但是这里有一个需要注意的点是机器人只能向右或者向下移动,因此我们的递归边界不用放置在到达终点,而可以放在到达右边界或者下边界的任意一点(因为只要到达右边界,剩下的路只能一直向下走,到达下边界同理),只要到达右或下边界即可认为找到一条路。代码如下:

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        self.res=0
        self.findway(m,n)
        return self.res
    def findway(self,m,n):
        if m==1 or n==1:
            self.res+=1
            return
        self.findway(m-1,n)
        self.findway(m,n-1)

可惜的是递归的方法时间复杂度为O(2^N),最终因为超时,没有通过,但是方法肯定是正确的。

现在用动态规划的方法来做,对非左上边界的任意一个格子,要到达这个格子,可从它的上面或者左边到达,因此到达该格子的路线总数等于到达该格子左边格子的路线总数加上到达该格子上面格子路线总数之和。(到达上边界和左边界任意一点的路线总数都为1),然后一直递推下去,最后得到最右下角也就是终点路线总数就行。这种方法的时间复杂度为O(n^2)。

代码:

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        dp=[[1]*m for i in range(n)]
        for i in range(1,n):
            for j in range(1,m):
                dp[i][j]=dp[i][j-1]+dp[i-1][j]
        return dp[n-1][m-1]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值