【发布时间】:2019-03-04 04:00:01
【问题描述】:
我正在解决需要解码字符串的问题..
包含 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;
}
我上面的方法有什么问题?
【问题讨论】:
-
2,2 和 7,而不是我假设的 22 和 7?
-
我用示例编辑了我的问题。我的输入基本上有两种方式:
2 2 7和22 7但我的程序给了我 3 作为输出。 -
如果
k为0,为什么返回1?顺便问一下,为什么需要k?
标签: java algorithm data-structures