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

Leetcode 40. 组合总和 II

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

Leetcode 40. 组合总和 II

题目传送地址: https://leetcode.cn/problems/combination-sum-ii/


代码如下:

 public static List> combinationSum2(int[] candidates, int target) {
        Set set = new HashSet<>();
        //先排序
        Arrays.sort(candidates);
        List> result = new ArrayList<>();
        for (int i = 0; i < candidates.length; i++) {
            if (candidates[i] > target) {
                continue;
            }
            List> combination = combination(candidates, i, target);
            if (!combination.isEmpty()) {
                for (List list : combination) {
                    if (set.add(Arrays.toString(list.toArray()))) {
                        result.add(list);
                    }
                }
            }
        }
        return result;
    }
    
//以索引位置i处的元素结尾,且组合出来的结果=target
    public static List> combination(int[] candidates, int i, int target) {
        List> result = new ArrayList<>();
        if (target == 0) {
            result.add(Arrays.asList());
            return result;
        }
        if (target == candidates[i]) {
            result.add(Arrays.asList(target));
            return result;
        }
        if (target - candidates[i] < 0) {  //
            return result;
        }
        int lastIndex = i - 1;
        if (lastIndex == 0 && candidates[0] == target - candidates[i]) {
            result.add(Arrays.asList(candidates[0], candidates[1]));
            return result;
        }
        int repeatCount = 1;
        while (lastIndex > 0 && candidates[lastIndex] == candidates[i]) {
            lastIndex--;
            repeatCount++;
        }
        for (int m = 1; m <= repeatCount; m++) {
            int n = lastIndex;
            while (n >= 0) {
                List> combination = combination(candidates, n, target - m * candidates[i]);
                for (List list : combination) {
                    List integers = new ArrayList<>(list);
                    for (int j = 0; j < m; j++) {
                        integers.add(candidates[i]);
                    }
                    result.add(integers);
                }
                n--;
            }
        }
        return result;
    }

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

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

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