看了一下别人写的,太复杂了。。
这道题难点在于去重,我也没有什么好办法,所以使用HashSet,记录每个list.tostring的值,进行去重
以下代码好于89%以上的答案
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
HashSet<String> set = new HashSet<>();
public ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) {
Arrays.sort(num);
cal(num, target, 0, new ArrayList<>());
return result;
}
private void cal(int[] num, int target, int current, ArrayList<Integer> list) {
if (current < num.length && num[current] > target) return;
for (int i = current; i < num.length; i++) {
if (num[i] == target) {
list.add(num[i]);
if (!set.contains(list.toString())) {
result.add(new ArrayList<>(list));
set.add(list.toString());
}
return;
} else if (num[i] < target) {
list.add(num[i]);
cal(num, target - num[i], i + 1, new ArrayList<>(list));
list.remove(list.size() - 1);
} else {
break;
}
}
}
京公网安备 11010502036488号