美文网首页
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