题目大意
https://leetcode.com/problems/decode-ways/
给你一个字符串,里边只含有数字0-9,而且0对应A,1对应B……26对应Z,问你这个字符串共有多少种解码方式,注意给的输入字符串有可能解码方案数为0,比如“90112”和“1212230”,输出就为0
题目分析
思路参考了这里。
https://github.com/haoel/leetcode/blob/master/algorithms/cpp/decodeWays/decodeWays.cpp
利用动态规划的思想,转移方程比较简单:
|
|
由于dp[i]
和dp[i-1]
,dp[i-2]
有关,所以初始化时需要计算出dp[0]
和dp[1]
。计算dp[1]
逻辑稍有点多,主要是因为需要考虑字符串前两位的各种情况,第一个位置分4种情况,0,1,2,3-9,第二个位置分五种情况,0,1,2,3-6,7-9。所以说计算dp[1]
的if,else要把这4*5=20种情况都能覆盖到。
代码
|
|
时间复杂度O(len)