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.
方法一:DP+滚动数组。时间O(n^2),空间O(n)。
class Solution {
public:
int uniquePaths(int m, int n) {
vector<int> f(n, 0);
f[0] = 1;
for(int i=0; i<m; i++)
{
for(int j=1; j<n; j++)
{
f[j] = f[j-1]+f[j];
}
}
return f[n-1];
}
};
方法二:DFS+备忘录法。时间O(n^2),空间O(n^2)。
class Solution {
public:
int uniquePaths(int m, int n) {
mem = vector<vector<int> >(m+1, vector<int>(n+1, -1));
return dfs(m, n, mem);
}
int dfs(int m, int n, vector<vector<int> > &mem)
{
if(m < 1 || n < 1)
return 0;
if(m ==1 && n == 1)
return 1;
else
{
if(mem[m-1][n] == -1) mem[m-1][n] = dfs(m-1, n, mem);
if(mem[m][n-1] == -1) mem[m][n-1] = dfs(m, n-1, mem);
return mem[m-1][n]+mem[m][n-1];
}
}
private:
vector<vector<int> > mem;
};