一题目描述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
思路一:回溯法
先处理[],递归遍历nums,遍历一次进行一次for循环,添加一个元素后继续递归遍历,然后再将此元素移除。
1
1——2
1——2——3
1——2
1
null
2
2——3
2
null
3
三、代码实现
思路一代码:
class Solution {
List<List<Integer>> list = new ArrayList<>();
Set<Integer> subSets = new HashSet<>();
public List<List<Integer>> subsets(int[] nums) {
list.add(new ArrayList<>(subSets));
backTrack(0, nums, list, subSets);
return list;
}
public void backTrack(int index, int[] nums, List<List<Integer>> list, Set<Integer> subSets){
if(nums.length <= index){
return;
}
for(int i = index; i < nums.length; i++){
subSets.add(nums[i]);
list.add(new ArrayList<>(subSets));
backTrack(i + 1, nums, list, subSets);
subSets.remove(nums[i]);
}
}
}