LeetCode第39题组合总和

    技术2022-07-14  70

    题目描述

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。

    解题思路

    1、关键点在于,如何判断数字和为 target,设置变量remain来记录是否为target

    remain - nums[i]
    代码
    class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> list = new ArrayList<>(); Arrays.sort(candidates); backtrack(list, new ArrayList<>(),candidates, target, 0); return list; } private void backtrack(List<List<Integer>> list, List<Integer> templist, int[] nums, int remain, int start){ if(remain < 0) return; else if(remain == 0) list.add(new ArrayList<>(templist)); else{ for(int i = start; i < nums.length; i++){ templist.add(nums[i]); backtrack(list, templist, nums, remain - nums[i], i); templist.remove(templist.size() - 1); } } } }

    参考:https://leetcode.com/problems/subsets/discuss/27281/A-general-approach-to-backtracking-questions-in-Java-(Subsets-Permutations-Combination-Sum-Palindrome-Partitioning)

    Processed: 0.014, SQL: 9