leetcode:17. 电话号码的字母组合(dfs)

Problem: 17. 电话号码的字母组合

文章目录

思路

看到排列组合相关的问题,首先想到的就是回溯算法求解,也就是深度优先搜索(dfs)进行求解,具体的编码解释已经在代码注释中标出,请看下面的code:

Code


/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
    if(!digits.length){
    return []
  }
  //定义 对应1-9位置的字符串
  const phoneNumChar = [
    "",
    "",
    "abc",
    "def",
    "ghi",
    "jkl",
    "mno",
    "pqrs",
    "tuv",
    "wxyz",
  ];
  const result = [];
  //current 用来存储当前深度的叶子节点,dep为当前遍历的深度信息
  function dfs(current, dep) {
    //如果current字符串的长度和最终叶子节点的长度一样,那么就表示已经到达了结束节点
    if (current.length === digits.length) {
      result.push(current)
      return
    }
    //创建一个nextStr字符串用来存储下一层的节点信息
    let nextStr = phoneNumChar[digits[dep]]
    //再遍历这层节点,与上层遍历出来的节点进行组合
    for (let i = 0; i < nextStr.length; i++) {
      //进入回溯
      dfs(current + nextStr[i], dep + 1)
    }
  }

  //启动回溯算法
  dfs('', 0);
  console.log(result)
  return result;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值