利用递归。2个2个拆分处理
/**
* @param {string} digits
* @return {string[]}
*/
var letterCombinations = function(digits) {
digits = digits.split('');
let toCal = digits.reduce((ll, el) => {
ll.push(transferToLetters(el));
return ll;
}, []);
return multiChance(...toCal);
function transferToLetters(num){
switch(num + ''){
case '2':
return ['a', 'b', 'c'];
case '3':
return ['d', 'e', 'f'];
case '4':
return ['g', 'h', 'i'];
case '5':
return ['j', 'k', 'l'];
case '6':
return ['m', 'n', 'o'];
case '7':
return ['p', 'q', 'r', 's'];
case '8':
return ['t', 'u', 'v'];
case '9':
return ['w', 'x', 'y', 'z'];
default:
return [];
}
}
function multiChance(...list){
if(list.length === 0){
return [];
}
if(list.length === 1){
return list[0];
}
if(list.length > 2){
let left = list.splice(0, 2);
let resLeft = multiChance(...left);
let toCal = [resLeft];
toCal.push(...list);
return multiChance(...toCal);
}
if(list.length === 2){
let l1 = list[0];
let l2 = list[1];
let res = [];
for(let i = 0; i < l1.length; ++i){
for(let j = 0; j < l2.length; ++j){
res.push(l1[i] + l2[j]);
}
}
return res;
}
}
};