LeetCode—91. Decode Ways

A message containing letters from A-Z is being encoded to numbers using the following mapping:

'A' -> 1

'B' -> 2

...

'Z' -> 26

Given a non-empty string containing only digits, determine the total number of ways to decode it.

Example 1:

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


给定一个字符串,由0-9数字构成,1-26分别代表A-Z,问给定的字符串可能代表几种字母组合。

dp算法,首先假设给定dp[k-2]、dp[k-1]的值。

1、考虑第k位能否单独表示一种字母,若第k位不为0,则表示第k位可以单独表示一种字母,则dp[k]首先加上dp[k-1]的值;若第k位为0,则不能单独表示。

2、再考虑第k位能否和k-1位拼成一个字母,则要求是第k-1位不为0而且k-1位的值乘10后加上k位的值,得到的值小于等于26,若符合要求,dp[k]再加上dp[k-2]的值。

要注意该算法要从dp[2]算起(若dp[0]为第一个值),注意初始化dp[0]和dp[1]。


int numDecodings(string s) {

        int n = s.length();

        int dp[n+1];

        dp[0] = 1;

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

        else dp[1] = 0;     

        for(int i=1; i<n; i++){

            dp[i+1] = 0;

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

            if(s[i-1] != '0' && (s[i-1] - '0')*10 + (s[i] - '0') <= 26) dp[i+1] += dp[i-1];

        }

        return dp[n];

    }

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

推荐阅读更多精彩内容

友情链接更多精彩内容