LeetCode:39组合总和

java 复制代码
class Solution {
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> path = new ArrayList<>();
    //实时记录总和
    int sum = 0;

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        backtrack(candidates, target, 0);
        return res;
    }

    private void backtrack(int[] candidates, int target, int startIndex){
        if(sum > target){
            return;
        }

        if(sum == target){
            res.add(new ArrayList<>(path));
            return;
        }

        //startIndex:防止回头,防止出现2,2,3和3,2,2同时出现的情况
        for(int i = startIndex; i < candidates.length; i++){
            path.add(candidates[i]);
            sum += candidates[i];
            
            //因为元素可以重复,所以这里从i开始
            backtrack(candidates, target, i);

            path.remove(path.size() - 1);
            sum -= candidates[i];
        }
    }
}

对比:

全排列:每次从头挑,没有startIndex,自己不能选自己,需要used数组

子集:每次只能往后挑,不能回头,需要startIndex,拿过一个必须走向下一个(传i+1)

组合总和:每次只能往后挑,不能回头,需要startIndex,但当前可以无限选(传i)

相关推荐
guodingdingh37 分钟前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯2 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
GuWenyue2 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
优橙教育2 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵3 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
我叫洋洋4 小时前
C ++ [ hello world ]
c语言·c++·算法
腻害兔4 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
碎光拾影5 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
奋发向前wcx5 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
Miao121316 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言