LeetCode91. Decode Ways——动态规划

文章目录

一、题目

A message containing letters from A-Z can be encoded into numbers using the following mapping:

'A' -> "1"

'B' -> "2"

...

'Z' -> "26"

To decode an encoded message, all the digits must be grouped then mapped back into letters using the reverse of the mapping above (there may be multiple ways). For example, "11106" can be mapped into:

"AAJF" with the grouping (1 1 10 6)

"KJF" with the grouping (11 10 6)

Note that the grouping (1 11 06) is invalid because "06" cannot be mapped into 'F' since "6" is different from "06".

Given a string s containing only digits, return the number of ways to decode it.

The test cases are generated so that the answer fits in a 32-bit integer.

Example 1:

Input: s = "12"

Output: 2

Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).

Example 2:

Input: s = "226"

Output: 3

Explanation: "226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).

Example 3:

Input: s = "06"

Output: 0

Explanation: "06" cannot be mapped to "F" because of the leading zero ("6" is different from "06").

Constraints:

1 <= s.length <= 100

s contains only digits and may contain leading zero(s).

二、题解

cpp 复制代码
class Solution {
public:
    int numDecodings(string s) {
        int n = s.size();
        vector<int> dp(n+1,0);
        dp[n] = 1;
        for(int i = n - 1;i >= 0;i--){
            if(s[i] == '0') dp[i] = 0;
            else{
                dp[i] = dp[i + 1];
                if(i + 1 < n && stoi(s.substr(i,2)) <= 26) dp[i] += dp[i+2];
            }
        }
        return dp[0];
    }
};
相关推荐
鳄鱼儿22 分钟前
密码算法的OID查阅
算法
卡提西亚32 分钟前
C++笔记-34-map/multimap容器
开发语言·c++·笔记
lxh01131 小时前
螺旋数组题解
前端·算法·js
2***B4491 小时前
C++在金融中的QuantLibXL
开发语言·c++·金融
A***07171 小时前
C++在游戏中的阴影渲染
开发语言·c++·游戏
czlczl200209252 小时前
算法:二叉树的公共祖先
算法
Q***l6872 小时前
C++在计算机图形学中的渲染
开发语言·c++
稚辉君.MCA_P8_Java2 小时前
Gemini永久会员 Java动态规划
java·数据结构·leetcode·排序算法·动态规划
oioihoii2 小时前
C++语言演进之路:从“C with Classes”到现代编程基石
java·c语言·c++
小白程序员成长日记3 小时前
2025.11.23 力扣每日一题
算法·leetcode·职场和发展