public List<List<Integer>>subsets(int[] nums){
List<List<Integer>> list =newArrayList<>();
Arrays.sort(nums);backtrack(list,newArrayList<>(), nums,0);return list;}privatevoidbacktrack(List<List<Integer>> list , List<Integer> tempList,int[] nums,int start){
list.add(newArrayList<>(tempList));for(int i = start; i < nums.length; i++){
tempList.add(nums[i]);backtrack(list, tempList, nums, i +1);
tempList.remove(tempList.size()-1);}}
public List<List<Integer>>combinationSum(int[] nums,int target){
List<List<Integer>> list =newArrayList<>();
Arrays.sort(nums);backtrack(list,newArrayList<>(), nums, target,0);return list;}privatevoidbacktrack(List<List<Integer>> list, List<Integer> tempList,int[] nums,int remain,int start){if(remain <0)return;elseif(remain ==0) list.add(newArrayList<>(tempList));else{for(int i = start; i < nums.length; i++){
tempList.add(nums[i]);backtrack(list, tempList, nums, remain - nums[i], i);// not i + 1 because we can reuse same elements
tempList.remove(tempList.size()-1);}}}
A general approach to backtracking questions in Java (Subsets, Permutations, Combination Sum, Palindrome Partitioning)高度套路化DFSSubsets : https://leetcode.com/problems/subsets/public List<List<...