39. Комбинация суммы
Учитывая не-повторять массив кандидат элементов и целевой целевой номер, вы можете найти все кандидат для целевых чисел и их комбинаций.
Неограниченное число кандидатов могут быть выбраны повторяется.
Описание:
Все цифры ( в том числе цели) являются положительными целыми числами.
Решение Set не может содержать их дубликаты комбинаций.
Пример 1:
Входной сигнал: кандидаты = [2,3,6,7], целевая = 7,
множество решается:
[
[7],
[2,2,3]
]
Пример 2:
Входной сигнал: кандидаты = [2,3,5], целевая = 8,
множество решается:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
Источник: пребывание кнопка (LeetCode)
ссылка: https: //leetcode-cn.com/problems/combination-sum
авторское право вычета из всех сетей. Коммерческая перепечатка пожалуйста , свяжитесь с уполномоченным должностным лицом, некоммерческим оттиском пожалуйста , укажите источник.
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> res = new ArrayList<>();
Arrays.sort(candidates);
//System.out.println(candidates);
backtrack(candidates, target, res, 0, new ArrayList<Integer>());
return res;
}
private void backtrack(int[] candidates, int target, List<List<Integer>> res, int i, ArrayList<Integer> tmp_list) {
if (target < 0) return;
if (target == 0) {
res.add(new ArrayList<>(tmp_list));
return;
}
for (int start = i; start < candidates.length; start++) {
if (target < 0) break;
//System.out.println(start);
tmp_list.add(candidates[start]);
//System.out.println(tmp_list);
backtrack(candidates, target - candidates[start], res, start, tmp_list);
tmp_list.remove(tmp_list.size() - 1);
}
}
}