classSolution{public:intuniquePaths(int m,int n){
vector<vector<int>>dp(m,vector<int>(n));for(int i =0; i < m; i++)
dp[i][0]=1;for(int i =0; i < n; i++)
dp[0][i]=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];}};
代码(8.25 二刷自解)
classSolution{public:intuniquePaths(int m,int n){
vector<vector<int>>dp(2,vector<int>(n+1,1));for(int i =2; i <= m; i++){for(int j =2; j <= n; j++){
dp[1][j]= dp[0][j]+ dp[1][j-1];}for(int k =1; k <= n; k++)
dp[0][k]= dp[1][k];}return dp[1][n];}};
代码(9.22 二刷自解)
classSolution{public:intuniquePaths(int m,int n){
vector<vector<int>>dp(2,vector<int>(n));
dp[1][0]=1;for(int i =0; i < n; i++)
dp[0][i]=1;for(int i =1; i < m; i++){for(int j =1; j < n; j++){
dp[1][j]= dp[0][j]+ dp[1][j-1];}for(int j =0; j < n; j++)
dp[0][j]= dp[1][j];}// cout<<dp[0][1];return dp[0][n-1];}};
classSolution{public:intuniquePathsWithObstacles(vector<vector<int>>& obstacleGrid){int m = obstacleGrid.size(), n = obstacleGrid[0].size();
vector<vector<int>>dp(m,vector<int>(n));for(int i =0; i < m; i++){if(obstacleGrid[i][0]==1)break;
dp[i][0]=1;}for(int i =0; i < n; i++){if(obstacleGrid[0][i]==1)break;
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];}};