classSolution{public:intdfs(int i,int j,int m,int n){if(i > m || j > n)return0;if(i == m && j == n)return1;returndfs(i +1, j, m, n)+dfs(i, j +1, m, n);}intuniquePaths(int m,int n){returndfs(1,1, m, n);}};
动态规划
classSolution{public:intuniquePaths(int m,int n){
vector<vector<int>>dp(m,vector<int>(n,0));for(int i =0; i < n; i++) dp[0][i]=1;for(int i =0; i < m; i++) dp[i][0]=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];}};
63. 不同路径 II
classSolution{public:intuniquePathsWithObstacles(vector<vector<int>>& obstacleGrid){int m = obstacleGrid.size();int n = obstacleGrid[0].size();
vector<vector<int>>dp(m,vector<int>(n,0));if(obstacleGrid[m -1][n -1]==1|| obstacleGrid[0][0]==1)return0;for(int i =0; i < m && obstacleGrid[i][0]==0; i++) dp[i][0]=1;for(int i =0; i < n && obstacleGrid[0][i]==0; i++) dp[0][i]=1;for(int i =1; i < m; i++){for(int j =1; j < n; j++){if(obstacleGrid[i][j]==1)continue;
dp[i][j]= dp[i -1][j]+ dp[i][j -1];}}return dp[m -1][n -1];}};