leetcode_combination_sum

难度:Medium

解题思路:因为元素可以无限制的使用,所以可以用递归的方式求解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> ret;
vector<int> cur_vec;
combination_sum_recur(ret,candidates,target,0,cur_vec);
return ret;
}
void combination_sum_recur(vector<vector<int>> &ret, vector<int>& candidates, int target, int index, vector<int>& cur_vec)
{
if(target == 0)
{
ret.push_back(cur_vec);
}
else if(target > 0)
{
for(int i = index; i < candidates.size(); i++)
{
cur_vec.push_back(candidates[i]);
combination_sum_recur(ret,candidates,target-candidates[i],i,cur_vec);
cur_vec.pop_back();//因为程序不是并行的,所以把元素pop掉,original可以继续使用
}
}

}
};

运行结果:16ms,超过64.59%