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)

相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
vipxieliang3 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot