zoukankan      html  css  js  c++  java
  • Combination Sum

    1.Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

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

    Note:

    • All numbers (including target) will be positive integers.
    • Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
    • The solution set must not contain duplicate combinations.

    For example, given candidate set 2,3,6,7 and target 7
    A solution set is: 
    [7] 
    [2, 2, 3] 

     1 class Solution {
     2 public:
     3     vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
     4         sort(candidates.begin(),candidates.end());
     5         vector<vector<int>> result;
     6         vector<int> path;
     7         dfs(0,0,target,candidates,path,result);
     8         return result;
     9     }
    10 private:
    11     void dfs(int curr,int k,int target,vector<int>& candiates,
    12         vector<int>& path,vector<vector<int>>& result){
    13         if(curr == target){
    14             result.push_back(path);
    15             return;
    16         }
    17 
    18         for(int i=k;i<candiates.size();i++){
    19             curr = curr+candiates[i];
    20             if(curr > target) break;
    21             else{
    22                 path.push_back(candiates[i]);
    23                 dfs(curr,i,target, candiates, path, result);
    24                 path.pop_back();
    25                 curr = curr - candiates[i];
    26             }
    27         }
    28     }
    29 };

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

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

    Note:

    • All numbers (including target) will be positive integers.
    • Elements in a combination (a1, a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
    • The solution set must not contain duplicate combinations.

    For example, given candidate set 10,1,2,7,6,1,5 and target 8
    A solution set is: 
    [1, 7] 
    [1, 2, 5] 
    [2, 6] 
    [1, 1, 6]

     1 class Solution {
     2 public:
     3      vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
     4         sort(candidates.begin(),candidates.end());
     5         vector<vector<int>> result;
     6         vector<int> path;
     7         dfs(0,0,target,candidates,path,result);
     8         return result;
     9     }
    10 private:
    11     void dfs(int curr,int k,int target,vector<int>& candiates,
    12         vector<int>& path,vector<vector<int>>& result){
    13         if(curr == target){
    14             if(find(result.begin(),result.end(),path)==result.end())
    15                 result.push_back(path);
    16             return;
    17         }
    18 
    19         for(int i=k;i<candiates.size();i++){
    20             curr = curr+candiates[i];
    21             if(curr > target) break;
    22             else{
    23                 path.push_back(candiates[i]);
    24                 dfs(curr,i+1,target, candiates, path, result);
    25                 path.pop_back();
    26                 curr = curr - candiates[i];
    27             }
    28         }
    29     }
    30 };

    3.Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

    Ensure that numbers within the set are sorted in ascending order.

    Example 1:

    Input: k = 3, n = 7

    Output:

     [[1,2,4]]

     Example 2:

    Input: k = 3, n = 9

    Output:

     [[1,2,6], [1,3,5], [2,3,4]]

     1 class Solution {
     2 public:
     3     vector<vector<int>> combinationSum3(int k, int n) {
     4         vector<vector<int>> result;
     5         vector<int> path;
     6         dfs(0,1,k,n,path,result);
     7         return result;
     8     }
     9 private:
    10     void dfs(int curr,int j,int k,int n,vector<int>& path,
    11         vector<vector<int>>& result){
    12         if(path.size()==k){
    13             if(curr == n){
    14                 result.push_back(path);
    15             }
    16             return;
    17         }
    18         for(int i=j;i<10;i++){
    19             curr = curr + i;
    20             if(curr > n) break;
    21             else{
    22                 path.push_back(i);
    23                 dfs(curr, i+1, k, n, path, result);
    24                 path.pop_back();
    25                 curr = curr - i;
    26             }
    27         }
    28     }
    29 };
  • 相关阅读:
    Apache Tomcat开机后台启动
    android res文件夹下面的 values-v11 、 values-v14
    view.performClick()触发点击事件
    android Java BASE64编码和解码一:基础
    Android 正则表达式
    Android 中的Json解析工具fastjson 、序列化、反序列化
    Android 5中不同效果的Toast
    Android 中的编码与解码
    Android Http请求框架二:xUtils 框架网络请求
    Android-Universal-Image-Loader 框架使用
  • 原文地址:https://www.cnblogs.com/wxquare/p/4999244.html
Copyright © 2011-2022 走看看