原题链接 一条包含字母 A-Z 的消息通过以下方式进行了编码:
'A' -> 1 'B' -> 2 ... 'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。 题目数据保证答案肯定是一个 32 位的整数。
使用动态规划算法求解,定义 f [ i ] f[i] f[i]表示由前 i i i个字符可以解码回去的字符串集合,考虑1位解码和两位解码的情况,转移方程为 f [ i ] = f [ i ] + f [ i − 1 ] f [ i ] = f [ i ] + f [ i − 2 ] if ( s [ i − 1 ] − ′ 0 ′ ) ∗ 10 + ( s [ i ] − ′ 0 ′ ) ∈ [ 10 , 26 ] f[i]=f[i]+f[i-1]\\ f[i]=f[i]+f[i-2] \quad \text{if} (s[i-1]-'0')*10+(s[i]-'0')\in[10, 26] f[i]=f[i]+f[i−1]f[i]=f[i]+f[i−2]if(s[i−1]−′0′)∗10+(s[i]−′0′)∈[10,26]