class Solution {
private:
int backtrack(int r,int c,int m,int n){
if(r==m-1&&c==n-1){
return 1;
}
if(r>=m||c>=n){
return 0;
}
return backtrack(r+1,c,m,n)+backtrack(r,c+1,m,n);
}
public:
int uniquePaths(int m, int n) {
return backtrack(0,0,m,n);
}
};
class Solution {
public:
int uniquePaths(int m, int n) {
int d[m+1][n+1] = {0};
for(int i=0;i<m-1;i++){
d[i][n]=0;
}
for(int j=0;j<n-1;j++){
d[m][j]=0;
}
for(int i=m-1;i>=0;i--){
for(int j=n-1;j>=0;j--){
if(i==m-1&&j==n-1){
d[i][j] = 1;
}else{
d[i][j]=d[i+1][j]+d[i][j+1];
}
}
}
return d[0][0];
}
};