LeetCode 题解:91. 解码方法,动态规划(优化),JavaScript,详细注释

原题链接:91. 解码方法
解题思路:
创建dp数组的注意点:
根据题意,
s[0]可能为'0'或'1',我们可以简单推导出s[0]的初始状态为:dp[1] = s[0] === '0' ? 0 : 1;。而任意一个位置
dp[i]的状态,最多可能和前两个位置有关。因此创建
s.length + 1长度的dp数组,并初始化dp[0] = 1,保证可以向前查找两位的状态,也就是默认虚拟的s[-1]位置是合规的编码。dp[i]对应的字符串位置为 s[i - 1]。
该题可以拆解为以下几种场景
s[i - 1]的编码范围是1-9,此时不会产生新的编码方法,状态转移方程:dp[i] = dp[i - 1];。s[i - 2] + s[i - 1]的范围是10~26,dp[i]与dp[i - 1]和dp[i - 2]有关,而dp[i - 1]在步骤 1 已经计算过,因此该条件的状态转移方程:dp[i] += dp[i - 2];。如果在判断过
10和20后,如果s[i - 1]还有出现0,表示当前一定出现了30、40、50等无法解码的情况,可以直接返回 0。
复制代码
 版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/1114f2fd0ce95fc9659fd3d03】。文章转载请联系作者。











    
评论