代码随想录第39天 62. 不同路径63. 不同路径 II

62. 不同路径

https://leetcode.cn/problems/unique-paths/

算法思想:

dp[i][j]含义走到i,j有多少种不同的路径

dp[i][j] = dp[i-1][j] + dp[i][j-1] 走到上方的格的不同路径和+走到左边方格不同的路径和

初始化:上方和左方的格初始化为1.


class Solution {

public:

    int uniquePaths(int m, int n) {

        vector<vector<int>> dp(m, vector<int> (n,1));

        //dp[i][j]表示走到i、j有dp[i][j]条路径

        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

https://leetcode.cn/problems/unique-paths-ii/submissions/

算法思想:

动态规划。与上一题不同的是,多了障碍物,此时障碍物的格子路径为0。

class Solution {

public:

    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {

        int m =obstacleGrid.size();

        int n = obstacleGrid[0].size();

        vector<vector<int>> dp(m, vector<int> (n));

        int val = 1;

        for(int j=0;j<n;j++)

        {

            if(obstacleGrid[0][j]==1)

                val = 0;

            dp[0][j] = val;

        }

        val = 1;

        for(int i=0;i<m;i++)

        {

            if(obstacleGrid[i][0]==1)

            {

                val=0;

            }

            dp[i][0] = val;

        }

        for(int i=1;i<m;i++)

        {

            for(int j=1;j<n;j++)

            {

                if(obstacleGrid[i][j]==1)

                    dp[i][j] = 0;

                else

                {

                    dp[i][j] = dp[i-1][j] + dp[i][j-1];

                }

            }

        }

        return dp[m-1][n-1];

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容