class Solution {
public:
int a[1000][1000]={{0}};
int uniquePaths(int m, int n) {
// int a[m+1][n+1]={0};
return dfs(m,n);
}
private:
int dfs(int m,int n)
{
if(m==0||n==0) return 0;
if(m==1) return 1;
if(n==1) return 1;
return getUpdate(m-1,n)+getUpdate(m,n-1);
}
int getUpdate(int m,int n)
{
if(a[m][n]>0) return a[m][n];
else return a[m][n]=dfs(m,n);
}
}; //备忘录法
public:
int a[1000][1000]={{0}};
int uniquePaths(int m, int n) {
// int a[m+1][n+1]={0};
return dfs(m,n);
}
private:
int dfs(int m,int n)
{
if(m==0||n==0) return 0;
if(m==1) return 1;
if(n==1) return 1;
return getUpdate(m-1,n)+getUpdate(m,n-1);
}
int getUpdate(int m,int n)
{
if(a[m][n]>0) return a[m][n];
else return a[m][n]=dfs(m,n);
}
}; //备忘录法