function getPaths(m, n) {// m * n 二维数组,模拟网格const map = new Array(m)for (let i = 0; i < m; i++) {map[i] = new Array(n)}// 如果只走第一行,就只有一条路径。所以第一行所有 item 都填充 1map[0].fill(1)// 如果只走第一列,也只有一条路径。所以第一列所有 item 都填充 1for (let i = 0; i < m; i++) {map[i][0] = 1}// 其他 item ,根据这个公式 map[i][j] = map[i - 1][j] + map[i][j - 1]// 如走到 [5, 4] 的路径数,就是 [4, 4] 和 [5, 3] 路径数的总和 —— 动态规划的思想// 注意:i 和 j 都从 1 开始 !!! 因为 0 位置已经被上文赋值为了for (let i = 1; i < m; i++) {for (let j = 1; j < n; j++) {map[i][j] = map[i - 1][j] + map[i][j - 1]}}// 返回 finish 节点的路径数return map[m - 1][n - 1]
}console.log('paths', getPaths(5, 4))