数字按键返回字母组合

根据电话按键,给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

思路:

用map保存数字对应的字母 ,

从第一个数字开始遍历,取一个字母,然后从第二个数字,取一个字母,第三个数字,取一个字母...

数字遍历结束,将拼接好的字符串str加入结果数组res,

回溯,删除最后一个数字对应的字母 ,

不断重复遍历和回溯。

var letterCombinations = function (digits) {
  // 如果字符串为空
  if (digits.length === 0) return [];
  let numMap = new Map([
    ['0', ''],
    ['1', ''],
    ['2', 'abc'],
    ['3', 'def'],
    ['4', 'ghi'],
    ['5', 'jkl'],
    ['6', 'mno'],
    ['7', 'pqrs'],
    ['8', 'tuv'],
    ['9', 'wxyz']
  ])
  let res = [];
  dfs("", digits);
  return res;

  function dfs(str, digit) {
    // 如果字符串为空,将拼接好的字符添加到数组
    if (digit.length === 0) res.push(str);
    else {
      // 字符串第一个字符对应的数字
      let numstr = numMap.get(digit[0]);
      // 组合字母
      for (let i = 0; i < numstr.length; i++) {
        str += numstr[i];
        // 递归已经组合的str和下一段字符串
        dfs(str, digit.slice(1))
        // 回溯
        str = str.slice(0, -1);
      }
    }
  }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值