• 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]
    ]
    
     1 class Solution {
     2     private List<List<Integer>> res = new ArrayList<>();
     3     public List<List<Integer>> combinationSum(int[] candidates, int target) {
     4         List<Integer> temp = new ArrayList<Integer>();
     5         help(temp,candidates,0,0,target);
     6         return res;
     7     }
     8     private void help(List<Integer> temp,int[] nums,int index,int cursum,int target){
     9         if(cursum>target)
    10             return;
    11         if(cursum==target)
    12             res.add(new ArrayList<Integer>(temp));
    13         for(int i = index;i<nums.length;i++){
    14             temp.add(nums[i]);
    15             help(temp,nums,i,cursum+nums[i],target);
    16             temp.remove(temp.size()-1);
    17         }
    18     }
    19 }

    2019.3.12

     1 class Solution {
     2 public:
     3     vector<vector<int>> finalres ;
     4     vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
     5         if(candidates.size()==0) return finalres;
     6         vector<int> curres;
     7         help(0,curres,candidates,0,target);
     8         return finalres;
     9         
    10     }
    11     void help(int cursum,vector<int>& curres,vector<int>& candidates,int index,int target){
    12         if(cursum==target)
    13             finalres.push_back(curres);
    14         if(cursum>target)
    15             return;
    16         for(int i = index;i<candidates.size();i++){
    17             curres.push_back(candidates[i]);
    18             help(cursum,curres,candidates,i,target-candidates[i]);
    19             curres.pop_back();
    20 
    21         }
    22     }
    23 };
  • 相关阅读:
    方法的调用
    控制语句
    运算符 及 流程控制语句
    标识符 二进制 数据类型之间的转换
    大数据中java基础概述
    Java常见对象
    Java为什么要在虚拟机中运行
    java基础之反射机制
    多线程
    Ajax详解
  • 原文地址:https://www.cnblogs.com/zle1992/p/8902391.html
Copyright © 2020-2023  润新知