最初我以为同样的数字,但是下标不一样选在一起算一种重复情况,于是最初的程序有这样一条判断
int last = -1;
for (int i = cur; i < n; ++i) {
if (nums[i] != last) {
last = nums[i];
dfs(i + 1, pos + 1, sum + nums[i]);
}
}
这样写是确保同一个数字只会一个位置出现一次,例如
4,3
2,2,3,4
情况下
2,3,4只会被记录一次。
但事实上,2,3,4需要被记录两次。于是删掉上述代码的“last”判断,测试通过。