题目描述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。
解题思路
对于backtrack函数: (1)添加结果 (2)for语句,在选择列表中选择 #做选择 tempList.add(nums[i]); #回溯,进入下一层 backtrack(list, tempList, nums, i + 1); #撤销选择 tempList.remove(tempList.size() - 1);
代码
class Solution {
public List
<List
<Integer>> subsets(int[] nums
) {
List
<List
<Integer>> list
= new ArrayList<>();
Arrays
.sort(nums
);
backtrack(list
, new ArrayList<>(), nums
, 0);
return list
;
}
private void backtrack(List
<List
<Integer>> list
, List
<Integer> tempList
, int[] nums
, int start
){
list
.add(new ArrayList<>(tempList
));
for(int i
= start
; i
< nums
.length
; i
++){
tempList
.add(nums
[i
]);
backtrack(list
, tempList
, nums
, i
+ 1);
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)