美文网首页
JavaScript电话号码组合

JavaScript电话号码组合

作者: 椰果粒 | 来源:发表于2019-04-03 14:22 被阅读0次

    问题描述

    问题描述

    思路
    递归的思想,两两组合,直到最后只剩下一个

    代码

    export default (str) => {
      // 电话号码键盘映射
      let map = ['', 1, 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz'];
      let numArr = str.split('');
      let codeArr = [];
      numArr.forEach(item => {
        if(map[item]){
          codeArr.push(map[item])
        }
      })
      let comb = (arr) => {
        // 考虑边界情况
        if(!arr) return [];
        if(!arr[1]) return arr.split("");
        let temp = [];
        for(let i=0, il=arr[0].length; i<il; i++){
          for(let j=0,jl=arr[1].length; j<jl; j++){
            temp.push(`${arr[0][i]}${arr[1][j]}`)
          }
        }
        arr.splice(0,2,temp); // 前两个组合完成之后,将temp数组代替前两个数组,再与第三个字符串
        // 如果还有多余的项,就继续递归,直到还剩下一个元素,将临时数组返回即可
        if(arr.length > 1){
          comb(arr)
        }else{
          return temp
        }
        return arr[0]
      }
      return !str ? [] : comb(codeArr)
    }
    
    大神代码:
    var letterCombinations = function(digits) {
      const map = ['',1,['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']]
      const code = digits.split('').map(v => map[v])  // 返回二维数组
      return !digits ? [] : 
        code.reduce((acc, cur) => [].concat(...acc.map(v => cur.map(j => `${v}${j}`))))
    }
    

    相关文章

      网友评论

          本文标题:JavaScript电话号码组合

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