前端面试基础必备JS学习笔记

123转为abc,lc,aw

2018-08-28  本文已影响7人  puxiaotaoc

前提:字符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
上一篇下一篇

猜你喜欢

热点阅读