不同路径
class Solution {
public int uniquePaths(int m, int n) {
/*
如何做? 动态规划 重叠子问题 计算型动态规划
确定状态:
到 右下角(m,n)的格子的路径 = 到(m-1,n)的路径 + 到(m,n-1) 的路径和
思考为什莫? 1.判断有无重复 ? 2 .判断有无遗漏?
我们每次智能向右 向下走 所以到达某个格子一定是没有重复的
子问题
到(m,n) 转化为到 (m-1 ,n )+ (m,n-1)智能从上面或者左边到达 (加法原理)
边界条件: 多少条路径到达第一行和第一列?
最左上角第一个格子只能原地一种方法
到达第一行的所有格子智能有一条路
到达一一列的所有格子只能向下走这一条路
计算顺序:
我们每一次计算都需要用到该格子的上面和左面的格子的路径数量
所以我们从上向下从左到右进行计算
地推方程:
f[i][j]设置为到达i,j 格子的 路径的总数量
f[i][j] = f[i][j-1] + f[i-1][j]
*/
int f[][] = new int[m][n];
for(int i = 0 ;i < m ; i++){
for(int j = 0 ; j < n ;j++){
if(i==0 || j==0){
f[i][j] =1;
}else{
f[i][j] = f[i][j-1]+f[i-1][j];
}
}
}
return f[m-1][n-1];
}
}