下面是电话号码字母组合题目,原题详见LeetCode电话号码的字母组合
js源代码:
export default (str)=>{
let numToChars = ['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];//键盘0-9数字对应的字母映射
//step1.如果没有传递数字
if(str.length<1) return [];
//step2.如果值传递了一个数字,将单个数字对应的字母变成数组
if(str.length<2) return numToChars[str[0]].split('');
//step3.如果传递数字大于两位数
let num = str.split('');//将传递过来的数字变成数组,如"34",变成['3','4']
let chars = [];//存储每个数字对应的字母
num.forEach(item=>{
chars.push(numToChars[item]); //['def','ghi']
})
//定义一个两两组合的函数,用于递归
let comb = (arr)=>{
// 临时变量用来保存前两个组合的结果
let tmp = []
for(let i =0;i<arr[0].length;i++){
for(let j=0;j<arr[1].length;j++){
tmp.push(`${arr[0][i]}${arr[1][j]}`);
}
}
arr.splice(0,2,tmp);
//递归
if(arr.length>1){
comb(arr);
}else{
return arr;
}
}
return comb(chars)[0];
}
测试文件:
import phoneCombination from '../../src/chapter2_array/phone_combination';
test('这里是电话组合',()=>{
expect(phoneCombination('23')).toEqual(["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]);
})
本demo使用jest测试工具进行测试,教程详见使用Jest测试JavaScript