示例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];
}
}