题意:编码方式为a->1,...z->26,给出编码后的数字字符串,问有多种编码方式
思路:用dp(i)表示从第1个字符到第i个字符时的编码方式,因为编码一个字符时,只能是0-9,编码两个字符时,只能为10-26
所以有dp(i) = dp(i-1) + dp(i-2) ,其中如果第i-1个字符不是0-9之间的数,则dp(i-1)=0,如果i-2到i之间的字符不是10-26,则dp(i-2)=0
代码如下:
public class Solution
{
public int numDecodings(String s)
{
if (s.length() == 0) return 0;
int[] dp = new int[s.length() + 1];
dp[0] = 1;
for (int i = 1; i <= s.length(); i++) {
if (i - 1 >= 0) {
int num = Integer.parseInt(s.substring(i - 1, i));
if (num >= 1 && num <= 9) dp[i] += dp[i - 1];
}
if (i - 2 >= 0) {
int num = Integer.parseInt(s.substring(i - 2, i));
if (num >= 10 && num <= 26) dp[i] += dp[i - 2];
}
}
return dp[s.length()];
}
}