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

[LeetCode] Combination Sum (bfs)

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

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

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

方法:用queue实现bfs

class Solution {
public:
    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
        vector<vector<int> > result;
         
        if(candidates.size()==0){    
          vector<int> tmp;
           result.push_back(tmp);
           return result;
        }    
        sort(candidates.begin(),candidates.end());
       

        bfs(result,candidates,target);
        return result;
    }//end func

private:
    void bfs(vector<vector<int> > &result,vector<int> &candidates,int target){
        queue<vector<int> > q;
        int len = candidates.size();
        for(int i = 0;i<len;i++){
            int sum = 0;
            int value = candidates[i];
            vector<int> tmp;
            while(true){
                sum += value;
                tmp.push_back(value);
                if(sum<target){       
                   q.push(tmp); 
                }else if(sum == target){
                   if(find(result.begin(),result.end(),tmp)==result.end())
                       result.push_back(tmp);
                }   
                else 
                    break;
            }
            
            while(!q.empty()){
                tmp = q.front();
                q.pop();
                sum = 0;
                for(int k=0;k<tmp.size();k++){
                    sum += tmp[k];
                }
                int sum0 = sum;
                vector<int> tmp0(tmp);
                for(int j=i+1;j<len;j++){
                    value = candidates[j];
                    while(true){
                        sum += value;
                        tmp.push_back(value);
                        if(sum<target){       
                            q.push(tmp);
                        }else if(sum == target){
                            sort(tmp.begin(),tmp.end());
                            if(find(result.begin(),result.end(),tmp)==result.end())
                                result.push_back(tmp);
                        }    
                        else 
                            break;
                    }
                    sum = sum0;
                    tmp = tmp0;
                }
            }                   
        }//end for        
    }//end func
};

 

[LeetCode] Combination Sum (bfs)

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

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

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