LeetCode 40.Combination Sum II

来源:互联网 发布:米兔积木机器人 编程 编辑:程序博客网 时间:2024/06/05 21:04
import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Test40 {public static void main(String[] args) {int[] candidates = {10, 1, 2, 7, 6, 1, 5};System.out.println(combinationSum2(candidates, 8));}public static List<List<Integer>> combinationSum2(int[] candidates, int target) {Arrays.sort(candidates);List<List<Integer>> result = new ArrayList<>();getResult(result, new ArrayList<>(), candidates, target, 0);return result;    }public static void getResult(List<List<Integer>> result, List<Integer> list, int[] c, int target, int start){if(target > 0){for(int i = start; i < c.length && target >= c[i]; i++){list.add(c[i]);getResult(result, list, c, target - c[i], i + 1);while((i + 1 < c.length) && (c[i] == c[i + 1]))   //判断重复值i++;list.remove(list.size() - 1);}}else if(target == 0)result.add(new ArrayList<>(list));}}
这个题目跟39很像,只是这个不允许重复出现,那么只需在递归调用的时候start的位置设置为 i+1即可,在后面跟判断重复值不在出现。
原创粉丝点击