使用深度优先搜索解决。
#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