前提:字符a-z 可以表示为 1-26
那么:abc 就可以表示为:123
那反过来,123就发现它可以表示成三种情况: abc,lc,aw
现在需要你实现一个函数 function decode(num) 输出所有情况
var MAP = ['', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
function decode(num) {
myDecode('', num);
}
// 采用前缀递归的方式
function myDecode(prefix, str) {
var len = str.length;
if (len == 0) {
console.log(prefix);
} else if (len == 1) {
console.log(prefix + MAP[parseInt(str)]);
} else {
// 20不能翻译为b,应该翻译为t
// 而且不应该出现单独翻译0的地方,0需要与前面一位进行拼接
if (str[1] == '0') {
var pre = parseInt(str[0] + str[1]);
if (pre < 30) {
myDecode(prefix + MAP[pre], str.substring(2))
} else {
return;
}
} else {
// 不管怎样,先将第一位看作单独的一位进行处理
myDecode(prefix + MAP[str[0]], str.substring(1));
// 然后判断前两位是否能够组成一个有效的字符,如果有效,则按两位处理
var index = parseInt(str[0] + str[1]);
if (index < 27) {
myDecode(prefix + MAP[index], str.substring(2))
}
}
}
}
decode('123') // abc aw lc