leetcode 刷题 log day 25

  • 216. 组合总和 III
    思路】相比于上一道求组和的题,多了一个判断条件:和,所以要在判断 k 的时候加上判断和是否相等。

    var combinationSum3 = function(k, n) {
        let path = [], res = [], sum = 0;
        const backtracking = (k, n, startIndex) => {
            if (sum > n) return;
            if (path.length === k) {
                if (sum === n) {
                    res.push([...path]);
                    return;
                }
            }
    
            for (let i = startIndex; i <= 9 - (k - path.length) + 1; i++) {
                sum += i;
                path.push(i);
                backtracking(k, n, i + 1);
                sum -= i;
                path.pop();
            }
        }
        backtracking(k, n, 1);
        return res;
    };
    
  • 17. 电话号码的字母组合
    思路】这道题比组合题简单的地方在于,确定了每一层循环的个数,即一个按键上的字母,所以不用记录每次递归的开始位置,但是要记录遍历到第几个按键。
    气愤】每次题是写会了,但是类型没处理明白,push 进去的是单个字母组成的数组,最后返回结果要一个字符串,要记得把每个 path 数组类型转换为数组(用 join)!

    var letterCombinations = function(digits) {
        if (!digits) return [];
        const map = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"];
        let path = [], res = [];
    
        const backtracking = (digits, index) => {
            if (index === digits.length) {
                res.push(path.join(''));  // 还是没想到用 join
                return;
            }
            let str = digits[index];
            for (const i of map[str]) {
                path.push(i);
                backtracking(digits, index + 1);
                path.pop();
            }
        }
        backtracking(digits, 0);
        return res;
    };
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值