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 - 2] + s[i - 1]的范围是10~26:
* 编码为10或20,只存在一种编码方法,并且只与dp[i - 2]有关,状态转移方程:dp[i] = dp[i - 2];。
* 编码为11-19或21-26,当前状态与前两个状态有关,状态转移方程:dp[i] = dp[i - 1] + dp[i - 2];。
s[i - 1]为 0,由于10或20已经处理过,此时s[i - 2] + s[i - 1]只有30、40、50等一系列可能性,当前无法解码,可直接返回0。s[i - 1]为1-9,此时不会产生新的编码方法,状态转移方程:dp[i] = dp[i - 1];。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/29bb797d73860226b792ec51b】。文章转载请联系作者。











评论