LeetCode算法题之62. Unique Paths(medium)【Python3题解】

这篇博客介绍了LeetCode中第62题的解题思路,即在一个m x n的网格中,从左上角到达右下角有多少条独特的路径。博主探讨了动态规划的解决方案,指出关键规律是每个位置的路径数等于其左边和上边位置的路径数之和,并提供了Python3的代码实现。代码运行时间32ms,优于49.57%的在线提交,内存使用13.7MB,优于5.77%的在线提交。

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

题目描述:
A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Finish’ in the diagram below).

How many possible unique paths are there?
在这里插入图片描述

题目大意:

  • 如图所示,题目会给你两个整数,代表了图中格子的尺寸,m是有多少列,n是有多少行
  • 有一个机器人,站在格子的左上角,右下角有一个目的地,然而它只能向右或向下行进
  • 问你,会有多少不同的路径可以选

解题思路:

  • 首先这是一道归结于动态规划标签下的题目,那就必然带有动态规划的特色与味道
  • 什么意思?一般那就是当时的状态必定能由前一种状态,由某种公式推导出来
  • 最开始本人想法是,无论你在哪,你不是就有两种可能吗,无非就是向右或者向下,在纸上画出来,就是一颗递归树
  • 但是Time Limit Exceed
  • 直到看到下图
    在这里插入图片描述
  • 啥意思?左上角是你,右下角是目的地,每个方框里面的数字,代表着无论目的地在哪里,会有的不同的路径数目
  • 如图所示,在什么位置上的目的地的不同路径数,全都等于它前面的数加上上面的数
  • 这就是规律,不过不好想,谁能直接就想到这种东西呢?反正我是不行
  • 不过可能这就是动态规划吧,你想出来了,那个规律你找到了,那么剩下的就是把这个规律用程序写出来了
  • 这个规律用数学符号表示就是:
    dp[m][n]=dp[m][n-1]+dp[m-1][n],意思就是当前数等于它的前一个数加上它上面的数
  • 我们在程序中只需要将这个dp_table实现,然后一步一步将它填满,填到的最后一个数,就是答案

少废话,上代码:

class Solution:
    def uniquePaths(self, m, n):
        # 生成一张符合m,n的尺寸的dp表,初始值先设为1
        # 因为最开始用到的就是1
        dp_table = [[1 for i in range(m)] for j in range(n)]

        # 下面两个循环就是开始填满这个表
        # 顺序是按照题意来讲的话,n代表行,m代表列
        # 从第一行开始填,逐列填过去,因为第0行全是1,第0列也全是1
        # 直到填到最后,也就是答案
        for row in range(1, n):
            for column in range(1, m):
                # 下面的公式,就是本题的推导公式
                dp_table[row][column] = dp_table[row][column-1] + dp_table[row-1][column]

        return dp_table[-1][-1]

运行时间和内存占用:

  • Runtime: 32 ms, faster than 49.57% of Python3 online submissions for Unique Paths.
  • Memory Usage: 13.7 MB, less than 5.77% of Python3 online submissions for Unique Paths.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值