字母组合---排列组合问题

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

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例:

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

说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
    const maps = {
        2: "abc",
        3: "def",
        4: "ghi",
        5: "jkl",
        6: "mno",
        7: "pqrs",
        8: "tuv",
        9: "wxyz"
    }
    const res = [];
    for (let num of digits) {
        let w = maps[num];
        if (res.length > 0) {
            let tmp = []
            for(let i = 0; i < res.length; i++) {    //标记1
                for(let j = 1; j < w.length; j++) {
                    tmp.push(res[i] + w[j])
                }
                res[i] += w[0]		//标记2
            }
            res.push(...tmp)
        } else {
            res.push(...w);
        }
    }
    return res;

};

备注:
标记1处,
首先想到用for in 实现的,测试了,最后的结果也是正确的,但是看到资料说,for in可以用于数组,遍历数组的索引index,但是要少用,原因是:

  1. index是字符串型的数字,不能进行几何运算
  2. index的顺序有可能不是数组的实际顺序
  3. for in会遍历数组的所有的可以枚举的属性,包括原型上的

因此这里就没有用for in,但是for in更适合用来遍历对象。
为了防止其检索方法函数,可以在里面加一个if,如下:

for(let index in obj) {
	if(obj.hasOwnProperty(index)){
		//your code
	}
}

然后,这里想到用for of直接取数组中的值item,程序没有报错,但是结果有问题,就是在标记2出,写成item += w[0]时,用debugger调试,这一步运行了,但是对应的item的值没有发生改变,我不明白是为什么,感谢诸位在留言区给出解答,在下定当感激不尽

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值