• 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]
    ]

     注意需要排序

     1 class Solution {
     2     private List<List<Integer>> res = new ArrayList<>();
     3     public List<List<Integer>> combinationSum2(int[] candidates, int target) {
     4         List<Integer> temp = new ArrayList<Integer>();
     5         Arrays.sort(candidates);
     6         help(temp,candidates,0,0,target);
     7         return res;
     8     }
     9     private void help(List<Integer> temp,int[] nums,int index,int cursum,int target){
    10         if(cursum>target)
    11             return;
    12         else if(cursum==target)
    13             res.add(new ArrayList<Integer>(temp));
    14         else{
    15             for(int i = index;i<nums.length;i++){
    16                 if(i > index && nums[i] == nums[i-1]) continue; // skip duplicates
    17                 temp.add(nums[i]);
    18                 help(temp,nums,i+1,cursum+nums[i],target);
    19                 temp.remove(temp.size()-1);
    20             }
    21         }
    22     }
    23 }
     1 class Solution:
     2     def __init__(self):
     3         self.res = []
     4     def combinationSum2(self, candidates, target):
     5         """
     6         :type candidates: List[int]
     7         :type target: int
     8         :rtype: List[List[int]]
     9         """
    10         def help(x,temp,index,cursum,t):
    11             temp = temp[:]
    12             if cursum>t:
    13                 return
    14             if(cursum==t):
    15                 self.res.append(temp)
    16             for i in range(index,len(x)):
    17                 if(i > index and x[i]==x[i-1]):
    18                     continue
    19                 temp.append(x[i])
    20                 help(x,temp,i+1,cursum +x[i],t)
    21                 temp.pop(-1)
    22                 
    23                 
    24         x = sorted(candidates)
    25         help(x,[],0,0,target)
    26         return self.res
    27 
    28         

    与上一个题目不同,这个题要求每个数字只能用一次,

    所以需要从i+1开始搜索(代码18行)

    candidates 中可能会有重复的元素

    [10,1,2,7,6,1,5]
    8

    如果没有19行,结果为

    Your answer
    [[1,1,6],[1,2,5],[1,7],[1,2,5],[1,7],[2,6]]
    Expected answer
    [[1,2,5],[1,7],[1,1,6],[2,6]]


    因为 1,1,2,5,6,7,10

    第一个1会生成结果125,17
    第二个1也会生成125,17

    2019.3.12

     1 class Solution {
     2 public:
     3     vector<vector<int>> finalres ;
     4     vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
     5         if(candidates.size()==0) return finalres;
     6         sort(candidates.begin(),candidates.end());
     7         vector<int> curres;
     8         help(0,curres,candidates,0,target);
     9         return finalres;
    10         
    11     }
    12     void help(int cursum,vector<int>& curres,vector<int>& candidates,int index,int target){
    13         if(cursum==target)
    14             finalres.push_back(curres);
    15         if(cursum>target)
    16             return;
    17         for(int i = index;i<candidates.size();i++){
    18             if(i >index && candidates[i]==candidates[i-1]) continue;
    19             curres.push_back(candidates[i]);
    20             help(cursum,curres,candidates,i+1,target-candidates[i]);
    21             curres.pop_back();
    22 
    23         }
    24     }
    25 };
  • 相关阅读:
    出现org.apache.ibatis.binding.BindingException异常
    EasyExcel读写操作
    window下运行nginx出现nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
    vue Module build failed: Error: Missing binding E:vuevue-demo ode_modules ode-sa ssvendorwin64
    Axios谷粒学院学习
    springboot中数据库的连接
    多表删除,删除一个表的同时删除中间表
    今天写了一个SSM小项目,运行之后,前端页面的CSS、js样式显示不出来,具体操作如下:
    Java中Iterator(迭代器)实现原理
    写一些东西,记录一下成长的过程
  • 原文地址:https://www.cnblogs.com/zle1992/p/8902499.html
Copyright © 2020-2023  润新知