题解 | #走方格的方案数#

走方格的方案数

http://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b

let line;
while(line = readline()) {
    let [n, m] = line.split(' ').map(e => parseInt(e));
    console.log(solution(n, m));
}
/**
 *动态规划求解:
 * dp[i-1][j-1] = dp[i-1][j] + dp[i][j-1];
 * 例如:2x2网格
   (6)----(3)----(1)
   |       |      |
 * (3)----(2)----(1)
   |       |      |
   (1)----(1)----(1)
   每个顶点标注其到达网格右下角的方案总数(括弧里面的数)
   依题意最后一行和最后一列顶点方案数都是1
   其它顶点的方案数等于右边和下面直接相邻的顶点方案数之和
   即:
   第(i-1,j-1)结点的方案数计算如下图:
    i-1,j-1 (A)----(B) i-1, j
            |       |
    i, j-1  (C)----(D) i, j
    A = B + C
 */
function solution(n, m) {
    let dp = new Array(n+1).fill(0).map(() => new Array(m+1));
    for(let i = 0;  i <= n; i++) {
        dp[i][m] = 1;
    }
    for(let j = 0;  j <= m; j++) {
        dp[n][j] = 1;
    }   
    for(let i = n; i > 0; i--) {
        for(let j = m; j > 0; j--) {
            dp[i-1][j-1] = dp[i-1][j] + dp[i][j-1];
        }
    }
    return dp[0][0];    
}

全部评论
注释的最后部分写错了吧,我理解的应该是这样: 第(i,j)结点的方案数计算如下图: 0,0  (A)----(B) i, j+1         |         | i+1,j (C)----(D) i, j A = B + C
1 回复 分享
发布于 2022-04-09 15:19
是的,谢谢指出,纠正了:)
点赞 回复 分享
发布于 2022-04-11 10:14
6
点赞 回复 分享
发布于 2022-09-01 16:10 湖北

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
评论
11
3
分享
牛客网
牛客企业服务