leetcode-91-解码方法
描述
一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。 示例 2: 输入: "226" 输出: 3 解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
解法
private static int numDecodings(String s) {
if (s.length() == 0 && s.charAt(0) == '0') {
return 0;
}
int dp1 = 1;
int dp2 = 1;
int tmp = 0;
for (int i = 1; i < s.length(); i++) {
System.out.println(s.charAt(i-1) + ":" + s.charAt(i) + ":" + (s.charAt(i-1) - 48));
int n = (s.charAt(i-1) - 48) * 10 + (s.charAt(i) - 48);
if (n >= 10 && n <= 26) {
tmp = dp1;
}
if (s.charAt(i) != '0') {
tmp += dp2;
}
dp1 = dp2;
dp2 = tmp;
tmp = 0;
}
return dp2;
}
点评:经典斐波那契序列
参考:https://leetcode-cn.com/problems/decode-ways/
浙公网安备 33010602011771号