[leetcode]Combination Sum

使用深度优先搜索解决。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Solution {
public:
    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
        vector<int> tmpresult;
        tmpresult.clear();
        combinationSumCore(candidates, 0, target, tmpresult);
        
        return res;
    }

    void combinationSumCore(vector<int> &candidates, int curr, int target, vector<int> tmpresult){
        if (0 == target){
            res.push_back(tmpresult);
            return;
        }
        
        if (curr == candidates.size())
            return;

        for (int i = 0; i <= target/candidates[curr]; i++){
                vector<int> tmpresult1(tmpresult);
                for (int j = 0; j < i; j++)
                    tmpresult1.push_back(candidates[curr]);
                combinationSumCore(candidates, curr+1, target-i*candidates[curr], tmpresult1);
        }
    }
private:
    vector<vector<int> > res;
};

int main()
{
    vector<int> vec;
    vec.push_back(1);
    Solution s;
    s.combinationSum(vec, 2);
    return 0;
}

 

 

 

 

 

 

EOF

posted on 2012-12-21 16:49  kkmm  阅读(264)  评论(0编辑  收藏  举报