Вот проблема
numberSet = [2,3,5], target number = 8
output -> [[2,2,2,2],[2,3,3],[3,5]]
И я думаю, что ее можно решить путем поиска с возвратом:
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> result = new LinkedList<>();
permutation(candidates, target, new LinkedList(), result);
return result;
}
public void permutation(int[] candidates, int target, List<Integer> subresult, List<List<Integer>> result){
if(target == 0){
result.add(subresult);
return;
}
for(int x: candidates){
if(target - x >= 0){
subresult.add(x);
permutation(candidates, target - x, subresult, result);
subresult.remove(subresult.size() - 1);
}
}
return;
}
Для меня все имеет смысл, однако мой результат:
[[],[],[],[]]
Все они пустой список ... Я хочу выяснить, почему я распечатываю каждый шаг, когда выполняется условие
if(target == 0){
result.add(subresult);
System.out.println(result);
return;
}
. И я думаю, что мой код действительно нашел решение (даже я не понял, как удалить эти дубликаты)
[[2, 2, 3]]
[[2, 3, 2], [2, 3, 2]]
[[3, 2, 2], [3, 2, 2], [3, 2, 2]]
[[7], [7], [7], [7]]
Почему это могло произойти ??? Почему список результатов все еще пуст? Огромное спасибо!