08网站建设,wordpress网站怎么加速,建筑施工合同模板,沈阳建设工程招标投标网一、题目描述 一个机器人位于一个 m x n 网格的左上角 #xff08;起始点在下图中标记为 “Start” #xff09;。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角#xff08;在下图中标记为 “Finish” #xff09;。问总共有多少条不同的路径#xff1…一、题目描述 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 “Start” 。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角在下图中标记为 “Finish” 。问总共有多少条不同的路径 示例 1
输入m 3, n 7 输出28
示例 2
输入m 3, n 2 输出3
解释从左上角开始总共有 3 条路径可以到达右下角。 向右 - 向下 - 向下 向下 - 向下 - 向右 向下 - 向右 - 向下 二、思路及回顾
由于机器人只能向下和向右移动所以二维数组中第一行和第一列永远只有一种走法
假设终点在第二行第二列图中鼠标通过推导我们可以得知有两种走法用二维数组表示这两种走法可以得出假设终点用f[ i ][ j ]它只能在终点的左边f[ i ][ j-1 ]即第二行第一列或者终点上边f[ i-1 ][ j ]即第一行第二列进入终点则这两种走法就是该点的两种路径再看看其他的点也满足这条件不管怎么走最后的路径都是在该点的左边或是上边进入。
由此可以推导出状态方程f[ i ][ j ] f[ i ][ j-1 ] f[ i-1 ][ j ] 现在定义 js二维数组可以用数组方法
const f new Array(m).fill(0).map(() new Array(n).fill(0));
解动态规划的步骤 1. 根据重叠问题定义状态 2. 寻找最优子结构推导状态方程 3. 确定dp初始状态 4. 确定输出值 三、代码展示
var uniquePaths function(m, n) {const f new Array(m).fill(0).map(() new Array(n).fill(0)); // 初始化数组// 初始化行for(let i 0; i m; i) {f[i][0] 1;}// 初始化列for(let j 0; j n; j) {f[0][j] 1}for(let i 1; i m; i) {for(let j 1; j n; j) {f[i][j] f[i][j-1] f[i-1][j] // 确定状态方程}}return f[m-1][n-1] // 确定最终值
}