栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java组合总数2 leetcode

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java组合总数2 leetcode

        给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

        candidates 中的每个数字在每个组合中只能使用 一次 。

        注意:解集不能包含重复的组合。 

提示:

1 <= candidates.length <= 100
1 <= candidates[i] <= 50
1 <= target <= 30

class Solution {   

    //存储结果
    List> list = new ArrayList<>();        
    //存储路径
    ArrayList track = new ArrayList<>();
    int sum = 0;

    public List> combinationSum2(int[] candidates, int target) {
        //先排序,让相同的元素排在一起
        Arrays.sort(candidates);
        recuit(candidates,target,0);
        return list;
    }

    public void recuit(int[] candidates, int target,int start){
        if(sum == target){
            list.add(new ArrayList(track));
            return;
        }

        //大于结果直接退出
        if(sum > target){
            return;
        }
        for(int i = start;i < candidates.length;i++){
            //剪枝,值相同的元素只遍历第一个
            if(i > start && candidates[i] == candidates[i - 1]){
                continue;
            }
            track.add(candidates[i]);
            sum += candidates[i];

            recuit(candidates,target,i + 1);

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/826395.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号