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)

相关推荐
美团技术团队43 分钟前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
像我这样帅的人丶你还2 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩2 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia2 小时前
Mybatis的日志输入
java
亦暖筑序4 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户298698530147 小时前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao7 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿8 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
鹤望兰6758 小时前
字节跳动国际支付-后端开发-三面面经
java
Flittly8 小时前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring