问题描述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?
输入:m = 3, n = 7
输出:28
解题思路:动态规划
- 定义二维数组dp[i][j],用来表示机器人到达第i行第j列的不同路径总数。
- 设置边界条件:
3. 设置状态转移函数:
4. 最后返回
代码实现(js)
/**
* @param {number} m
* @param {number} n
* @return {number}
*/
var uniquePaths = function(m, n) {
// 1.定义一个二维数组dp[i][j],用来表示机器人到达第i行第j列最多路径数量
let dp = new Array(m)
for(let i = 0; i < m; i++){
dp[i] = new Array(n).fill(0)
}
// 2.第一行为1
for(let j = 0; j < n; j++){
dp[0][j] = 1
}
// 3.第一列为1
for(let i = 0; i < m; i++){
dp[i][0] = 1
}
// 4.剩余的行和列
for(let i = 1; i < m; i++){
for(let j = 1; j < n; j++){
dp[i][j] = dp[i-1][j] + dp[i][j-1]
}
}
return dp[m-1][n-1]
};