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)

相关推荐
pnoker8 分钟前
从工业软件到 AI 智能体:工业 AIoT 技术路线的系统梳理
java·人工智能·物联网·microsoft·开源·工业互联网
全栈技术负责人9 分钟前
DeepSeek Harness 业务工具权限插件 dsh-tool-permission设计思路
网络·算法·ai·ai编程
mmmmath_314 分钟前
面试题 02.07. 链表相交
算法·链表
专注仿真17 分钟前
Vapor框架构建及Swift for TensorFlow图像分析
java·其他
逃逸线LOF18 分钟前
Spring的AOP简介
java·后端·spring
砚底藏山河23 分钟前
【量化纯GET实战 #21】用 pandas 做分析:把接口数据变成 DataFrame
java·python·金融·maven·pandas
圣保罗的大教堂26 分钟前
leetcode 3903. 最小稳定下标 I 简单
leetcode
Zzzzmo_37 分钟前
Spring MVC
java·spring·mvc·cookie/session
cfm_291439 分钟前
Spring核心设计模式
java·spring·设计模式
Java小白笔记41 分钟前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云