示例2:输入:m = 3, n = 2输出:3
解释:从左上角开始,总共有 3 条路径可以到达右下角。
1.向右 -> 向下 -> 向下
2.向下 -> 向下 -> 向右
3.向下 -> 向右 -> 向下
思路:因此每一格的路径由其上一格和左一格决定
用f( i, j ) 表示从左上角走到 ( i , j )的路径数量,其中 i 和 j 的范围分别是 [0, m) 和 [0, n)。
由于我们每一步只能从向下或者向右移动一步,
因此要想走到 ( i, j )如果向下走一步,会从 (i-1, j) 走过来;如果向右走一步,会从( i, j-1) 走过来。
动态规划转移方程: f(i, j) = f(i-1, j) + f(i, j-1)
class algorithm {
public int Different paths(int m, int n) {
int [][]f=new int[m][n];
for(int i=0;i<m;++i){
f[i][0]=1;
}
for(int j=0;j<n;++j){
f[0][j]=1;
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
f[i][j]=f[i-1][j]+f[i][j-1];
}
}
return f[m-1][n-1];
}
}
本文解析了如何使用动态规划算法解决从左上角到右下角的m×n网格中不同路径计数问题,通过递推公式f(i,j)=f(i-1,j)+f(i,j-1)计算路径总数,实例说明并提供了Java代码实现。

4万+

被折叠的 条评论
为什么被折叠?



