039J. Combination Sum

https://leetcode.com/problems/combination-sum/

这个题的难点是 动态规划 DP.c

Method Trivial: BackTracking

这个题BackTracking的难度在于,又一个思维的惯性。 一般backtracker(int index), 自动,index + 1。 而这个题不排除使用重复的元素。 如 [2,3,6,7] 找 7. 如何既找到 [2,2,3], 又避免出现重复的结果,如[2,3,2] [3,2,2] 呢? 方法是 向下传递的时候 index 并不加 1. 中止思维惯性。

而 target - nums[i], 也较为巧妙。

class Solution {
    private int[] nums;
    private List<List<Integer>> ans;
    private LinkedList<Integer> temp;

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        this.nums = candidates;
        this.ans = new LinkedList<>();
        this.temp = new LinkedList<>();
        backtracker(target, 0);
        return ans;
    }
    private void backtracker(int target, int index){
        if(target < 0) return;
        if(target == 0){
            ans.add(new LinkedList<>(temp));
            return;
        }
        for(int i = index ; i < nums.length; i++){
            temp.addLast(nums[i]);
            backtracker(target - nums[i], i);
            temp.removeLast();
        }
    }
}

Last updated

Was this helpful?