题目
思路
一道经典的排列组合去重问题,搜索的思路很简单,关键在于如何去重。
借用一下代码随想录的图
去重的工作实际上就是判断同一层上的相同元素是否已经被用过。即如果 candidates[i] == candidates[i - 1]
并且 used[i - 1] == false
就说明:前一个树枝,使用了candidates[i - 1]
,也就是说同一树层使用过 candidates[i - 1]
。
代码
for(int i = index; i < len; i++){
if(i > 0 && candidates[i] == candidates[i - 1] && !used[i - 1]){
ontinue;
}
path.addLast(candidates[i]);
sum += candidates[i];
used[i] = true;
dfs(candidates, i + 1, len, target);
used[i] = false;
sum -= candidates[i];
path.removeLast();
}
标签:used,false,sum,len,candidates,排列组合,方法
From: https://www.cnblogs.com/shixuanliu/p/17176895.html