【每日刷题】Day113

【每日刷题】Day113

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 91. 解码方法 - 力扣(LeetCode)

2. LCR 098. 不同路径 - 力扣(LeetCode)

3. 63. 不同路径 II - 力扣(LeetCode)

1. 91. 解码方法 - 力扣(LeetCode)

//思路:动态规划。

class Solution {

public:

    int numDecodings(string s)

    {

//如果开头为 '0' ,则没有解码方法。

        if(s[0]=='0') return 0;

        int size = s.size();

        vector<int> dp(size);

//初始化前两个位置的解码数

        dp[0] = 1;

        if(size==1) return dp[0];

        if(s[1]!='0') dp[1]++;

//判断能否与前一个数共同解码

        int num = (s[0]-'0')*10+s[1]-'0';

        if(num>=10&&num<=26) dp[1]++;

        for(int i = 2;i<size;i++)

        {

            int num = (s[i-1]-'0')*10+s[i]-'0';

//如果当前数字自身能够解码,则其解码数为前一个位置的解码数

            if(s[i]!='0') dp[i]+=dp[i-1];

//如果当前数字能够与前一个位置解码,则其解码数为 i-2 位置的解码数

            if(num>=10&&num<=26) dp[i]+=dp[i-2];

        }

        return dp[size-1];

    }

};

2. LCR 098. 不同路径 - 力扣(LeetCode)

//思路:动态规划。

class Solution {

public:

    int uniquePaths(int m, int n)

    {

//多开一行和一列

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

//[0][1]用于后续循环中初始化起点位置

        dp[0][1] = 1;

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

        {

            for(int j = 0;j<n;j++) dp[i+1][j+1] = dp[i][j+1]+dp[i+1][j];//套用方程

        }

        return dp[m][n];

    }

};

3. 63. 不同路径 II - 力扣(LeetCode)

//思路:动态规划。

//与上面那题的思路基本相同,区别在于多了障碍判断。有障碍的位置在dp中的值为0,代表走法数为0

class Solution {

public:

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

    {

        int rows = obstacleGrid.size(),cols = obstacleGrid[0].size();

        vector<vector<long long>> dp(rows+1,vector<long long>(cols+1));

        dp[0][1] = 1;

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

        {

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

            {

//判断当前是否为障碍

                if(!obstacleGrid[i][j])

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

            }

        }

        return dp[rows][cols];

    }

};

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值