LeetCode(top100) 电话号码的字母组合

电话号码的字母组合

题目描述

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

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述

题目分析

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

思路(一)
/* 
 @param {string} digits 
 * @return {string[]} 
 */
var letterCombinations = function(str) {
      if (str.length < 1) return []
       // 建立电话号码键盘映射
      let map = ['', 1, 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
       // 如果只给了一个按键,直接把按键内容取出来并按单个字符分组就可以了(LeetCode测试用例)
       if (str.length < 2) return map[str].split('')  
       // 把输入字符串按单字符分隔变成数组,234=>[2,3,4] 
       let num = str.split('')  
       // 保存键盘映射后的字母内容,如 23=>['abc','def']  
       let code = []  num.forEach(item => {
             if (map[item]) {
                 code.push(map[item])    
              }  
        })
       let comb = (arr) => {
        // 临时变量用来保存前两个组合的结果
          let tmp = []
          // 最外层的循环是遍历第一个元素,里层的循环是遍历第二个元素
         for (let i = 0, il = arr[0].length; i < il; i++) {
           for (let j = 0, jl = arr[1].length; j < jl; j++) {
                    tmp.push(`${arr[0][i]}${arr[1][j]}`)
            }
       }
      arr.splice(0, 2, tmp)
      if (arr.length > 1) {
            comb(arr)
      } else {
            return tmp
      }
      return arr[0]
   }
  return comb(code)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值