【动态规划】64. 最小路径和 62. 不同路径

64. 最小路径和

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int len_x = grid.size();
        int len_y = grid[0].size();
        int dp[len_y];
        dp[0] = grid[0][0];
        for(int j=1;j<len_y;++j)
            dp[j] = dp[j-1] + grid[0][j];
        for(int i=1;i<len_x;++i)
            for(int j=0;j<len_y;++j)
                if(j != 0)
                    dp[j] = min(dp[j], dp[j-1]) + grid[i][j];
                else
                    dp[j] = dp[j] + grid[i][j];
        return dp[len_y-1];
    }
};

62. 不同路径

class Solution {
public:
    int uniquePaths(int m, int n) {
        int dp[n];
        for(int j=0;j<n;++j)
            dp[j] = 1;
        for(int i=1;i<m;++i)
            for(int j=0;j<n;++j)
                if(j!=0)
                    dp[j] = dp[j] + dp[j-1];
                else
                    dp[j] = 1;
        return dp[n-1];
    }
};

63. 不同路径 II

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        int len_y = obstacleGrid.size();
        int len_x = obstacleGrid[0].size();
        int dp[len_x];
        dp[0] = obstacleGrid[0][0]==1?0:1;
        for(int j=1;j<len_x;++j){
            dp[j] = dp[j-1];
            if(obstacleGrid[0][j]==1)
                dp[j] = 0;
        }
        for(int i=1;i<len_y;++i){
            if(obstacleGrid[i][0] == 1)
                dp[0] = 0;
            for(int j=1;j<len_x;++j){
                if(obstacleGrid[i][j] == 1)
                    dp[j] = 0;
                else 
                    dp[j] = dp[j] + dp[j-1];
            }
        }
        return dp[len_x-1];
    }
};
posted @ 2022-03-02 10:27  fwx  阅读(22)  评论(0)    收藏  举报