zoukankan      html  css  js  c++  java
  • [LC] 39. Combination Sum

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

    The same repeated number may be chosen from candidates unlimited number of times.

    Note:

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

    Example 1:

    Input: candidates = [2,3,6,7], target = 7,
    A solution set is:
    [
      [7],
      [2,2,3]
    ]
    

    Example 2:

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

    Time: O(N^|target|)
    Space: O(|target|)
     1 class Solution:
     2     def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
     3         res = []
     4         lst = []
     5         self.dfs(candidates, lst, res, 0, target)
     6         return res
     7     
     8     def dfs(self, candidates, lst, res, start, reminder):
     9         if reminder < 0:
    10             return
    11         if reminder == 0:
    12             res.append(list(lst))
    13             return
    14         for i in range(start, len(candidates)):
    15             cur_num = candidates[i]
    16             lst.append(cur_num)
    17             self.dfs(candidates, lst, res, i, reminder - cur_num)
    18             lst.pop()
    19 
    20             
    class Solution {
        public List<List<Integer>> combinationSum(int[] candidates, int target) {
            List<List<Integer>> result = new ArrayList<>();
            if (candidates == null) {
                return result;
            }
            List<Integer> list = new ArrayList<>();
            helper(candidates, list, 0, target, result);
            return result;
        }
        
        private void helper(int[] nums, List<Integer> list, int index, int reminder, List<List<Integer>> result)     {
            if (reminder < 0) {
                return;
            }
            if (reminder == 0) {
                result.add(new ArrayList<>(list));
                return;
            }
            for (int i = index; i < nums.length; i++) {
                list.add(nums[i]);
                helper(nums, list, i, reminder - nums[i], result);
                list.remove(list.size() - 1);
            }
        }
    }
  • 相关阅读:
    BZOJ3744 : Gty的妹子序列
    BZOJ2827 : 千山鸟飞绝
    BZOJ3547 : [ONTAK2010]Matchings
    BZOJ1185 : [HNOI2007]最小矩形覆盖
    BZOJ3046 : lagoon
    BZOJ3743 : [Coci2014]Kamp
    BZOJ3742 : Painting
    iOS移动开发周报-第25期
    适合码农工作时玩的游戏:Scrum
    iOS移动开发周报-第24期
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11683491.html
Copyright © 2011-2022 走看看