算法刷题 Day 39 | ● 62.不同路径 ● 63. 不同路径 II

62.不同路径

本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。

https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html

视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu

Tips:这道题我是在上方和左边填0了,这样只要初始化一个(1,1)节点就可以

我的题解:

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

63.不同路径 II

https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.html

视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6

Tips:这题也没啥好说的,遇到障碍物的时候把对应的dp置为0即可。

我的题解:

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        vector<vector<int>> dp(obstacleGrid.size() + 1,vector<int>(obstacleGrid[0].size()+1,0));
        for(int i = 1; i<=obstacleGrid.size();i++){
            for(int j = 1; j<=obstacleGrid[0].size(); j++){
                if(obstacleGrid[i-1][j-1] == 1){
                    dp[i][j] = 0;
                }
                else if(i == 1 && j == 1){
                    dp[i][j] = 1;
                }
                else{
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
            }
        }
        return dp[obstacleGrid.size()][obstacleGrid[0].size()];
    }
};
posted @ 2023-02-17 17:11  GavinGYM  阅读(11)  评论(0)    收藏  举报