回溯集合

1. Subsets

public List<List<Integer>> subsets(int[] nums) {
    
    List<List<Integer>> res = new ArrayList<>();
    Arrays.sort(nums);
    backtrack(res, new ArrayList<>(), nums, 0);
    
    return res;
}

private void backtrack (List<List<Integer>> list, 
                        List<Integer> track, int[] nums, int start) {
    
    list.add(new ArrayList<>(track));
    
    for (int i = start; i < nums.length; i++) {
        track.add(nums[i]);
        backtrack(list, track, nums, i + 1);
        track.remove(track.size() - 1);
    }
}

2. Subsets II (contains duplicates)

3. Permutations

4. Permutations II (contains duplicates)

5. Combination Sum

6. Combination Sum II (can't reuse same element)

7. Palindrome Partitioning

最后更新于

这有帮助吗?