首页 > 代码库 > [LeetCode] Combination Sum (bfs)

[LeetCode] Combination Sum (bfs)

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 funcprivate:    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 =http://www.mamicode.com/ 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)