您的位置:首页 > 其它

leetcode 62. 不同路径

2019-03-12 08:26 295 查看
  1. 题目链接 https://leetcode-cn.com/problems/unique-paths/comments/

  2. 题目描述

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

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

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

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

  3. 示例 1:

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

    示例 2:

    输入: m = 7, n = 3
    输出: 28
  • 解题思路

      递归: 可以将问题分解为走到上面格子的路径加上走到左边格子需要的路径。
    1. 递归的过程存在重复解,可以通过动态规划来优化,开辟一个dp数组,保存每次的结果。
    2. 数学:通过观察,可以知道机器人向右走了m-1,向左走了n-1步,一共走了m+n-2步,其中哪几步是向下走的,找到所有组合就是答案。
  • 代码

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

       

    1. python(math)

      [code]class Solution:
      def uniquePaths(self, m, n):
      return int(math.factorial(m + n - 2) / math.factorial(m -1) / math.factorial(n-1))

       

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: