17. Letter Combinations of a Phone Number

本文介绍了一种解决电话号码对应字母组合问题的算法。该算法接收包含2到9的数字字符串作为输入,并返回所有可能的字母组合。文章详细解释了实现思路及常见错误,并提供了一个JavaScript函数实现。

Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.

A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.

Example:

Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

Note:

Although the above answer is in lexicographical order, your answer could be in any order you want.

思路:这题要两个两个的求也就是说先求出前两个的组合然后在和第三个数所对应的字符集求组合

我做这题时犯了两个错1:初始化ans的时候,居然把obj里的属性值直接赋给了ans,导致ans变化,obj也跟这变

2.知道哪里错了之后,我居然用ans = new Array(num[第一个数字])来初始化,这样不行,因为它会把ans里的第一个数初始化为obj[第一个数],而不是把ans初始化的和num[第一个数 ]一样

/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
  var len = digits.length;  
  if(len == 0) return [];
  else {
    var obj = {
      2 : ['a', 'b', 'c'],
      3 : ['d', 'e', 'f'],
      4 : ['g', 'h', 'i'],
      5 : ['j', 'k', 'l'],
      6 : ['m', 'n', 'o'],
      7 : ['p', 'q', 'r', 's'],
      8 : ['t', 'u', 'v'],
      9 : ['w', 'x', 'y', 'z']
    }
    var ans;
    var len2, len3;
    var str;
    var num = parseInt(digits[0]);
    ans = [].concat(obj[num]);//初始化数组
    //console.log(ans);
    for(let i = 1 ; i < len; i ++){
      num = parseInt(digits[i]);
      len2 = ans.length;
      len3 = obj[num].length;
      for(let j = 0; j < len2; j ++){
        for(let z = 0; z < len3; z ++){
          str = ans[j] + obj[num][z];
          //console.log(ans[j], obj[num][z], str);
          if(ans.indexOf(str) == -1) ans.push(str);
        }
      }
      for(let j = 0; j < len2; j ++) ans.shift();
    }
    return ans;
  }
};



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值