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?
这道题在没有时间限制的条件下就是简单的排列问题,结果为C_(m+n-2)^(m-1)。OJ上会 runtime error.
class Solution {
int func(int x){
x*=(x?(func(x-1)):1);
return x;
}
public:
int uniquePaths(int m, int n) {
if(m<1||n<1) return 0;
if(m==1||n==1) return 1;
return func(m+n-2)/(func(m-1)*func(n-1));
}
};
这道题很明显是用动态规划来做。结点[i][j]的路径值 path[i][j]=path[i-1][j]+path[i][j-1]。注意边界条件:最左边列和最上边行的值均为1.
class Solution {
public:
int uniquePaths(int m, int n) {
vector<vector<int> > path(m, vector<int>(n, 1));
for(int i = 1; i < m; i ++)
{
for(int j = 1; j < n; j ++)
{
path[i][j] = path[i-1][j] + path[i][j-1];
}
}
return path[m-1][n-1];
}
};