LeetCode#40 | Nobilta's Blog
0%

LeetCode#40

LeetCode#40组合总和Ⅱ

题目:

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用一次。

说明:

所有数字(包括目标数)都是正整数。
解集不能包含重复的组合。
来源:力扣(LeetCode)
链接

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
27
28
29
30
31
32
class Solution {
public:
vector<vector<int>>ans;
vector<int>temp;
void dfs(vector<int>& candidates,int target,int pos,int sum)
{
if(sum == target)
{
for(int i = 0 ; i < ans.size() ; i ++)//判断当前找到的vector是否已经存在了
{
if(temp == ans[i])
return;
}
ans.push_back(temp);
return;
}
if(sum > target)
return;
if(pos >= candidates.size())
return;

temp.push_back(candidates[pos]);
dfs(candidates,target,pos+1,sum+candidates[pos]);
temp.pop_back();
dfs(candidates,target,pos+1,sum);
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());//首先对数组进行排序
dfs(candidates,target,0,0);
return ans;
}
};

这本来是一道很简单的递归回溯问题,但是因为题目要求不能包含重复的题解,所以对于我这个菜鸡一下就难了起来…通过对stl库的了解发现,sort是可以直接用来排序简单形式的vector的(按照字典序排列),且vector本身是可以使用标准运算符(如== > <等等进行比较的,仅限简单数据类型)
(鸽了好久的博客终于要开始更了)
(咕咕咕)

您的支持将鼓励我继续创作!