考虑以下编码方案A-> 1,B - > 2,Z-> 26.给定使用此方案的编码(包含最多1000个数字的字符串),找到可能的解码数。输出应返回包含解码数的字符串。 注意:只需填写函数编码
输入格式
单行String
输出格式
单行String
示例输入
121
示例输出
3
解释
输入" 121"的可能解码是ABA,AU,LA。
示例输入#2: 1201 样本输出#2: 3 可能的输入解码" 1201"是ATA,AT,TA
答案 0 :(得分:0)
static Map<String, String> map = new HashMap<>();
static {
for (int i = 1; i < 26; ++i)
map.put(Integer.toString(i), Character.toString((char)('A' + i - 1)));
}
static void decode(String decoded, String encoded, List<String> result) {
int len = encoded.length();
if (len == 0)
result.add(decoded);
else
for (int i = 1, max = Math.min(2, len); i <= max; ++i) {
String e = map.get(encoded.substring(0, i));
if (e != null)
decode(decoded + e, encoded.substring(i), result);
}
}
public static List<String> decode(String encoded) {
List<String> result = new ArrayList<>();
decode("", encoded, result);
return result;
}
@Test
public void testDecode() {
System.out.println(decode("121"));
System.out.println(decode("1201"));
}
结果是:
[ABA, AU, LA]
[ATA]