美文网首页程序员
力扣 40 组合总和 II

力扣 40 组合总和 II

作者: zhaojinhui | 来源:发表于2020-07-22 11:37 被阅读0次

题意:给定一个数组和一个target值,返回和为target且为给定数组子数组的所有结果,和上一题不同的是有重复元素

思路:深度优先搜索遍历每一种可能结果,思路和39题类似,唯一不同的是注意去除重复

思想:DFS

复杂度:时间O(n2),空间O(n^2)

class Solution {
    List<List<Integer>> res = new ArrayList();
    public List<List<Integer>> combinationSum2(int[] candidates, int target) {
        int len = candidates.length;
        if(len == 0)
            return res;
        Arrays.sort(candidates);
        build(candidates, target, new ArrayList<Integer>(), 0, 0);
        return res;
    }
    
    void build(int[] a, int target, List<Integer> temp, int index, int sum) {
        if(sum > target)
            return;
        if(sum == target) {
            res.add(new ArrayList(temp));
            return;
        }
        for(int i=index;i<a.length;i++) {
            // 去除重复的元素,
            if(i>index && a[i] == a[i-1])
                continue;
            temp.add(a[i]);
            build(a, target, temp, i+1, sum + a[i]);
            temp.remove(temp.size() - 1);
        }
    }
}

相关文章

  • 力扣 40 组合总和 II

    题意:给定一个数组和一个target值,返回和为target且为给定数组子数组的所有结果,和上一题不同的是有重复元...

  • LeetCode 力扣 40. 组合总和 II

    题目描述(中等难度) 和上一道题非常像了,区别在于这里给的数组中有重复的数字,每个数字只能使用一次,然后同样是给出...

  • 40 组合总和 II

    题目: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使...

  • 40. 组合总和 II

    40. 组合总和 II(难度:中等) 题目链接:https://leetcode-cn.com/problems/...

  • 40. 组合总和 II

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为...

  • 40.组合总和II

    题目给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字...

  • 40.组合总和 II

    自己解法 标准的回溯加剪枝,思路很清晰,但是在细节上出了点小问题,一个是递归的时候应该用i+1,用成了start ...

  • 40. 组合总和 II

    题目描述 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以...

  • 40. 组合总和 II

    题目 40. 组合总和 II 给定一个数组 candidates 和一个目标数 target ,找出 candid...

  • LeetCode - #40 组合总和 II

    前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤...

网友评论

    本文标题:力扣 40 组合总和 II

    本文链接:https://www.haomeiwen.com/subject/nlyzkktx.html