https://leetcode.com/problems/decode-ways/
解题思路:解码有多少种方法。一般求“多少”我们考虑使用dp。状态方程如下:
decode s[i], decode (s[i-1], s[i]). 当s[i-1], s[i]这两个字符是10~26但不包括10和20这两个数时,比如21,那么可以有两种编码方式(BA,U),所以dp[i]=dp[i-1]+dp[i-2]. 这里不要以为这里有3中decode方法,因为如果decode 2是一个code,1是一个code,这种2是一个code的方案应该放在dp[n-1]里面去考虑
不能decode s[i]以及(s[i-1], s[i]), 但可以decode s[i-1]。 s[i-1]当s[i-1], s[i]等于10或者20时,由于10和20只有一种编码方式,所以dp[i]=dp[i-2]
只能decode s[i]。当s[i-1], s[i]不在以上两个范围时,如09这种,编码方式为0,没有09对应的编码,只有9对应的编码,所以不能简单的判断第i个数与第i-1个数组成的数是否小于或者等于26来进行编码。而31这种,dp[i]=dp[i-1]。因为对于当前字符s[i]只有本身一种decode的方法,所以dp[i] = dp[i-1] * 1
注意初始化时:dp[0]=1,dp[1]=1