Skip to content

62. 不同路径 #60

Description

@buuing

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

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

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

示例 1:

image

输入: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 * 109

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-paths
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。




  • 记忆化搜索
const uniquePaths = (m, n) => {
  const memo = [[1]]
  const dfs = (x, y) => {
    if (x === 0 || y === 0) return 1
    if (!memo[x]) memo[x] = [1]
    if (!memo[x][y]) {
      memo[x][y] = dfs(x - 1, y) + dfs(x, y - 1)
    }
    return memo[x][y]
  }
  return dfs(m - 1, n - 1)
}
  • 动态规划
const uniquePaths = (m, n) => {
  const dp = [new Array(n).fill(1)]
  for (let i = 1; i < m; i++) {
    dp[i] = []
    for (let j = 0; j < n; j++) {
      dp[i][j] = dp[i - 1][j] + ~~dp[i][j - 1]
    }
  }
  return dp[m - 1][n - 1]
}
  • 动态规划(降维)
const uniquePaths = (m, n) => {
  const dp = new Array(n).fill(1)
  for (let i = 1; i < m; i++) {
    for (let j = 0; j < n; j++) {
      dp[j] = dp[j] + ~~dp[j - 1]
    }
  }
  return dp[n - 1]
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions