美文网首页
62. 不同路径

62. 不同路径

作者: Chiduru | 来源:发表于2020-02-26 00:14 被阅读0次

    【Description】

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

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

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

    例如,上图是一个7 x 3 的网格。有多少可能的路径?

    说明:m 和 n 的值均不超过 100。

    示例 1:

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

    1. 向右 -> 向右 -> 向下
    2. 向右 -> 向下 -> 向右
    3. 向下 -> 向右 -> 向右
      示例 2:

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

    【Idea】
    无脑联想回溯。return solution(m-1, n) + solution(m, n-1)
    但是时间复杂度真是太感人了...
    ①动态规划解法思路比较明确。列二维矩阵,中间某一坐标(x, y)的前一坐标只有(x-1, y)和(x, y-1)两种。
    因此矩阵下标即代表对应网格位置,矩阵内元素值表示该点下的路径种类,有=>arr[i][j] = arr[i-1][j] + arr[i][j-1]
    ②数学逻辑上讲,也可以直接用排列组合分析。不管怎么走总步数都是(m+n-2)步,向下的步数=n-1, 向右的步数为m-1,result = C(n-1, m+n-2)

    【Solution】

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

    T() = O(mn)
    S() = O(mn)
    两个指标都不是很好QAQ


    image.png

    相关文章

      网友评论

          本文标题:62. 不同路径

          本文链接:https://www.haomeiwen.com/subject/wdklchtx.html