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】。文章转载请联系作者。
评论