不同路径的数目
动态规划——简单
题目描述:
在一个m*n的网格的左上角有一个机器人,机器人在任何时候只能向下或者向右移动,
机器人试图到达网格的右下角,有多少可能的路径。
动态规划:
问题:
从左上角到右下角,只能向下或向右;从(0,0)到(i,j)共有几种路径
状态分析:
子问题:从(0,0)到(i,j)的路径数;
dp(i,j) : 到(i,j)的路径总数;
状态转移方程:
dp(i,j) = dp(i,j-1) + dp(i-1,j);
边界:
最顶部:i == 0 -> dp(0,j) = dp(0,j-1);
最左部:j == 0 -> dp(i,0) = dp(i-1,0);
初始值:
dp[0] [0] = 0;
dp[0] = 1;
dp[i] [0] = 1;
返回值:
dp(i,j);
public int uniquePaths (int m, int n) {
// write code here
int[][] dp = new int[m][n];
//初始值
for(int i=0;i<m;i++){
dp[i][0] = 1;
}
for(int i=0;i<n;i++){
dp[0][i] = 1;
}
for(int i = 1;i<m;i++){
for(int j = 1;j<n;j++){
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
动规一点也不难!!!?