1.简述:
通过以下映射编码包含字母A-Z的消息:'A' -> "1"'B' -> "2"...'Z' -> "26"
要解码已编码的信息,所有数字必须反向映射回字母(可能有多种方法)。例如,“11106”可以映射为:
"AAJF",将消息分组成(1 1 10 6)
"KJF将消息分组成(11 10 6)
请注意,消息不能分组(1) 11 06)因为“06”不能映射为“F这是因为“6”和“06”在映射中并不等价。
给你一个非空字符串s,只有数字,请计算并返回解码方法的总数。
问题数据保证答案必须是32 位的整数。
示例 1: 输入:s = “12”输出:2解释:可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2: 输入:s = “226”输出:3解释:可解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
示例 3: 输入:s = “06”输出:0解释:“06” 无法映射到 "F" ,因为有前导零(“6”) 和 "06" 不等价)。
2.实现代码: class Solution { public int numDecodings(String s) { int n = s.length(); int[] f = new int[n + 1]; f[0] = 1; for (int i = 1; i <= n; ++i) { if (s.charAt(i - 1) != '0') { f[i] += f[i - 1]; } if (i > 1 && s.charAt(i - 2) != '0' && ((s.charAt(i - 2) - '0') * 10 + (s.charAt(i - 1) - '0') <= 26)) { f[i] += f[i - 2]; } } return f[n]; }}