123转为abc,lc,aw

作者: puxiaotaoc | 来源:发表于2018-08-28 23:53 被阅读7次

    前提:字符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
    

    相关文章

      网友评论

        本文标题:123转为abc,lc,aw

        本文链接:https://www.haomeiwen.com/subject/damcwftx.html