数组类算法题:电话号码的字母组合(js版本)

下面是电话号码字母组合题目,原题详见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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值