zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    vue2 生命周期
    javascript http库axios
    vue2自定义事件之$emit
    php配置rewrite模块
    php 正则匹配中文(转)
    php常用自定义函数
    Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)
    Mysql----mysql启动服务时提示"服务名无效"
    div+css布局
    php常见问题以及解决方法
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14584031.html
Copyright © 2011-2022 走看看