• LeetCode 62. 不同路径


    62. 不同路径

    Difficulty: 中等

    一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。

    机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

    问总共有多少条不同的路径?

    示例 1:

    输入:m = 3, n = 7
    输出:28
    

    示例 2:

    输入:m = 3, n = 2
    输出:3
    解释:
    从左上角开始,总共有 3 条路径可以到达右下角。
    1. 向右 -> 向下 -> 向下
    2. 向下 -> 向下 -> 向右
    3. 向下 -> 向右 -> 向下
    

    示例 3:

    输入:m = 7, n = 3
    输出:28
    

    示例 4:

    输入:m = 3, n = 3
    输出:6
    

    提示:

    • 1 <= m, n <= 100
    • 题目数据保证答案小于等于 2 * 10<sup>9</sup>

    Solution

    这是一道考察动态规划的题,解决动态规划的关键是如何将大的问题分解为小的子问题,在本题中令到达m,n网格的路径条数有f(m,n)条,因为机器人只能向下或者向右移动,那么到达m,n之前只可能在(m,n-1)(m-1,n)两个网格之间,那么可得f(m,n)=f(m,n-1)+f(m-1,n),即本题的动态转移方程。因此,我们可以从矩阵的(1,1)出发,向目标(m,n)递推逼近求解,时间复杂度为O(mn)

    最近几天做了几道动态规划的题目之后慢慢地发现解题的一些规律了。

    class Solution:
        def uniquePaths(self, m: int, n: int) -> int:
            paths = [[0] * (n+1) for _ in range(m+1)]
            if m < 0 or n < 0:
                return 0
            paths[1][1] = 1
            for i in range(1, m+1):
                for j in range(1, n+1):
                    if i == 1 and j == 1:
                        continue
                    else:
                        paths[i][j] = paths[i-1][j] + paths[i][j-1]
            return paths[m][n]
    

    参考:花花酱 LeetCode 62. Unique Paths - 刷题找工作 EP45 - YouTube

  • 相关阅读:
    CSS 之 伪类及伪元素
    php使用strlen()判断中文汉字字符串长度
    代码评审
    Windows下获取本机IP地址方法介绍
    c++ windows 获取mac地址
    Windows编译安装OpenSSL
    visio studio2008 删除最近的项目
    Windows中杀死占用某个端口的进程
    apache日志文件太大的问题
    text段,data段,bss段,堆和栈
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14584031.html
Copyright © 2020-2023  润新知