码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Combination Sum II (递归)

时间:2014-08-24 23:29:33      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   os   io   strong   for   ar   

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, a1a2 ≤ … ≤ 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]

class Solution {
public:
    vector<int> num;
    int target;
    vector<vector<int> > result;
    vector<vector<int> > combinationSum2(vector<int> &num, int target) {
        this->num = num;
        this->target = target;
        
        if(num.size()==0){
            vector<int> tmp;
            result.push_back(tmp);
            return result;
        }
        
        sort(this->num.begin(),this->num.end());
        for(int i=0;i<num.size();i++){
           vector<int> tmp(1,this->num[i]);
           recursion(i+1,tmp,this->num[i]);
        
        }
        
        return result;
    }
private:
    void recursion(int start,vector<int> tmp,int sum){
        if(sum == target && find(result.begin(),result.end(),tmp)==result.end()){
            result.push_back(tmp);
            return;
        }                    
        vector<int> tmp0(tmp);
        int sum0 = sum;
        for(int i=start;i<num.size();i++){
            tmp.push_back(num[i]);
            sum += num[i];
            if(sum<target)
               recursion(i+1,tmp,sum);
            else if(sum == target){
                if(find(result.begin(),result.end(),tmp)==result.end())
                    result.push_back(tmp);
            }                
            else
                break;
            tmp = tmp0;
            sum = sum0;
        }    
    }//end func
};

 

[LeetCode] Combination Sum II (递归)

标签:des   style   blog   color   os   io   strong   for   ar   

原文地址:http://www.cnblogs.com/Xylophone/p/3933734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!