NO.91 解码方法 中等
思路一:动态规划
dp[i]的含义:s[i]结尾的字符串有多少解法方法。
初始化:大小s.length+1,包含空串。空串初始化为1,只有一个字符,如果字符是0则无法解码即为0,否则初始化为1。
状态转移:从i==2开始,存在三种情况:
- i元素和i-1元素都为0,则无法解码(参数是错误编码的字符串),即
return 0
; - i-1元素为0,i无法和i-1进行组合,只能作为个位数字进行解码,即
dp[i]=d[i-1]
。 - i元素为0,只能和i-1元素组合为两位数字,如果这个组合后的两位数字大于26则无法正确解码,即
return 0
;如果小于等于26,即dp[i]=dp[i-2]
。 - 如果i元素和i-1元素都不为0,判断i和i-1元素组合后的两位数是否大于26,如果大于26则只能单独作为个位数进行解码,即
dp[i]=dp[i-1]
;如果小于等于26则既能作为两个个位数进行解码也可以作为一个两位数进行解码,即dp[i]=dp[i-1]+dp[i-2]
。
1 | public int numDecodings(String s) { |
时间复杂度:O(n)
本人菜鸟,有错误请告知,感激不尽!
更多题解和源码:github