LeetCode:39. 组合总和

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode:39. 组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

示例 1:

输入:candidates = [2,3,6,7], target = 7

输出:[[2,2,3],[7]]

解释:

2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。

7 也是一个候选, 7 = 7 。

仅有这两种组合。

示例 2:

输入: candidates = [2,3,5], target = 8

输出: [[2,2,2,2],[2,3,3],[3,5]]

示例 3:

输入: candidates = [2], target = 1

输出: []

本题里面candidates是可以重复的,在进入递归函数的时候传递的参数是i,上一题不能重复,传递的是i+1

java 复制代码
	public List<List<Integer>> combinationSum(int[] candidates, int target) {
        Arrays.sort(candidates);
        List<List<Integer>> res = new ArrayList<>();
        backtracking(candidates, target, 0, 0, new ArrayList<>(), res);
        return res;
    }

    private void backtracking(int[] candidates, int target, int index, int sum, List<Integer> path,
            List<List<Integer>> res) {
        if (sum == target) {
            res.add(new ArrayList<>(path));
            return;
        }

        for (int i = index; i < candidates.length; i++) {
            if (sum + candidates[i] > target)
                break;
            path.add(candidates[i]);
            // 注意因为数字可以重复,所以递归函数中传递的还是i
            backtracking(candidates, target, i, sum + candidates[i], path, res);
            path.removeLast();
        }
    }
相关推荐
带刺的坐椅4 分钟前
又一个项级的 Java Multi Agent 开源项目
java·ai·agent·solon·智能体
Σίσυφος190016 分钟前
RANSAC算法原理与应用
算法
Voyager_429 分钟前
StringRedisTemplate 和 RedisTemplate 的区别是什么?
java·spring boot
杏花春雨江南30 分钟前
JavaWeb企业级项目实战:从SSH到SSM演进 + MQ/Redis/ES高可用架构落地全复盘(实战干货+避坑指南)
java·jvm·spring
我星期八休息32 分钟前
MySQL数据可视化实战指南
数据库·人工智能·mysql·算法·信息可视化
UR的出不克35 分钟前
使用 Python 爬取 Bilibili 弹幕数据并导出 Excel
java·python·excel
程序员-King.40 分钟前
day144—递归—平衡二叉树(LeetCode-110)
算法·leetcode·二叉树·递归
老鼠只爱大米42 分钟前
LeetCode经典算法面试题 #739:每日温度(单调栈、动态规划等多种实现方案详解)
算法·leetcode·面试·动态规划·单调栈·每日温度
老鼠只爱大米1 小时前
LeetCode经典算法面试题 #394:字符串解码(递归、双栈、迭代构建等五种实现方案详解)
算法·leetcode·面试·递归··字符串解码
独自破碎E1 小时前
【回溯+剪枝】字符串的排列
算法·机器学习·剪枝