xiqe / code-train

前端算法
0 stars 0 forks source link

电话号码的字母组合 #184

Open xiqe opened 5 years ago

xiqe commented 5 years ago

电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

Alt

示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

reply

var letterCombinations = function(digits) {
    if(digits=='')return [];
    let n = ['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];      // 设置规则
    let arr = digits.split('').map(x=>n[x]).filter(x=>x!=='');      // 将有效数字转换成字母数组
    if(arr.length<2)return arr[0].split('');      // 单一数组直接字符串spilt
    const comb = (a,b) => {      // 两两数组(字符串)组合并且返回新的数组
        let temp = [];
        for(let i=0;i<a.length;i++){
            for(let j=0;j<b.length;j++){
                temp.push(`${a[i]}${b[j]}`)
            }
        }
        return temp
    }
    let [i,result] = [2,comb(arr[0],arr[1])];
    while (i < arr.length) {      // 循环数组两两组合,直接最后一个字符串完成结束
      result = comb(result,arr[i])
      i++;
    }
    return result;
};