原题链接:https://leetcode-cn.com/problems/unique-paths/
解题思路:
- 在网格中的任意一点,都有向右和向下两种走法。同时它也是从上方和左方两个位置走过来的。
- 那么,任意一点的走法数量,等于从起点走到上方和左方点的数量之和。
- 因此,只需要用长度为n的数组递推即可。
- 动态规划的状态转移方程为:
dp[j]=dp[j-1]+dp[j]
。 - 起点只有一种走法,因此起始位置为1。
/**
* @param {number} m
* @param {number} n
* @return {number}
*/
var uniquePaths = function(m, n) {
// 存储递推结果
let dp = new Array(n).fill(0)
// 起点的路径数量为1
dp[0] = 1
// 计算网格中每个点的路径数量
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
// 当前位置的路径数量,为它的左方和上方的路径数量之和
// j为0时,dp[j - 1]不存在,将其当做0即可
dp[j] += dp[j - 1] ?? 0
}
}
//终点的路径数量就是最终结果
return dp[n - 1]
};