zoukankan      html  css  js  c++  java
  • [LeetCode] 40. Combination Sum II


    Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.

    Each number in candidates may only be used once in the combination.

    Note:

    • All numbers (including target) will be positive integers.
    • The solution set must not contain duplicate combinations.

    Example 1:

    Input: candidates = [10,1,2,7,6,1,5], target = 8,
    A solution set is:
    [
      [1, 7],
      [1, 2, 5],
      [2, 6],
      [1, 1, 6]
    ]
    

    Example 2:

    Input: candidates = [2,5,2,1,2], target = 5,
    A solution set is:
    [
      [1,2,2],
      [5]
    ]

    题意:给一个数组,找出所有列表满足,列表和等于target
    题不难,回溯算法,大家注意一点就行了,有重复的元素,使用set
    class Solution {
        public List<List<Integer>> combinationSum2(int[] candidates, int target) {
            Set<List<Integer>> res = new HashSet<>();
            if (candidates.length == 0)
                return new ArrayList<>(res);
            Arrays.sort(candidates);
            DFS(res, new ArrayList<Integer>(), candidates, target, 0, 0);
            return new ArrayList<>(res);
        }
    
        private void DFS(Set<List<Integer>> res, ArrayList<Integer> list, int[] candidates, int target, int index, int sum) {
            for (int i = index; i < candidates.length; i++) {
                sum += candidates[i];
                list.add(candidates[i]);
                if (sum == target)
                    res.add(new ArrayList<>(list));
                else if (sum < target)
                    DFS(res, list, candidates, target, i + 1, sum);
                else if (sum > target) {
                    sum -= candidates[i];
                    list.remove(list.size() - 1);
                    break;
                }
                sum -= candidates[i];
                list.remove(list.size() - 1);
            }
        }
    }
     
  • 相关阅读:
    Unix高级编程之文件权限
    gdb手册
    libev 使用
    Unix高级环境编程之fcntl函数
    设计基于锁的并发数据结构
    CPU占用分析
    atomic用法
    RESTful架构搜集
    神奇的VIM
    [转] boost:lexical_cast用法
  • 原文地址:https://www.cnblogs.com/Moriarty-cx/p/9942971.html
Copyright © 2011-2022 走看看