题目:
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
How many possible unique paths are there?
Above is a 3 x 7 grid. How many possible unique paths are there?
Note: m and n will be at most 100.
题意:
找出从start走到finish 共有多少条路径
解题思路:
动态规划
1、需要一个二维dp[i][j] ,维护当第i行,第j列的时候,走到这个点已经有多少条路径
2、确认边界,设第一行和第一列初始值为1
3、推导递推公式,由于它只能向下或像右走,那么当前这个的值就等于它上面加上左边的的值,也就是dp[i][j] = dp[i-1][j] + dp[i][j-1]
这题应该是动态规划的入门题了,递推公式也十分明显,与minimum-path-sum 这题思路都差不多。
Java代码,空间和时间的复杂度都是O(m*n):
public static int uniquePaths(int m, int n) {
if(m == 0 || n == 0) {
return 1;
}
int[][] dp = new int[m][n];
for(int i = 0;i < m;i++) {
dp[i][0] = 1;
}
for(int j = 0;j < n;j++) {
dp[0][j] = 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];
}