我正在处理需要解码字符串的问题。
包含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)。
我想出了以下递归方法,但是对于此输入“ 227”它给出了错误的输出。输出应为“ 2”,但我的程序给出的值为“ 3”:
public static int decodeWays(String data) {
return helper(data, data.length());
}
private static int helper(String data, int k) {
if (k == 0)
return 1;
int s = data.length() - k;
if (data.charAt(s) == '0')
return 0;
int result = helper(data, k - 1);
if (k >= 2 && Integer.parseInt(data.substring(0, 2)) <= 26) {
result += helper(data, k - 2);
}
return result;
}
我的上述方法有什么问题?
答案 0 :(得分:2)
在此行-
if (k >= 2 && Integer.parseInt(data.substring(0, 2)) <= 26) {
您始终检查相同的2位数字data.substring(0, 2)
。而是考虑类似
data.substring(data.length()-k, data.length()).substring(0, 2)
或
data.substring(data.length()-k, data.length()-k+2)