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/