leetcode–78.子集
题目:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
算法:使用回溯算法
代码:
class Solution {
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
if(nums == null || nums.length ==0){
return lists;
}
List<Integer> list = new ArrayList<>();
process(list, nums, 0);
return lists;
}
private void process(List<Integer>list, int[] nums, int start){
lists.add(new ArrayList(list));
for(int i = start; i < nums.length; i++){
list.add(nums[i]);
process(list, nums, i+1);
list.remove(list.size()-1);
}
}
}
leetcode–90.子集II
题目:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
与上一问题相似,只需多加一个判断:如果出现重复数字,则跳出本次循环
if(i> start
&& nums[i-1]==nums[i])
continue;
代码:
List<List<Integer>> lists = new ArrayList<>();
public List<List<Integer>> subsets(int[] nums) {
if(nums == null || nums.length ==0){
return lists;
}
Arrays.sort(nums);
List<Integer> list = new ArrayList<>();
process(list, nums, 0);
return lists;
}
private void process(List<Integer>list, int[] nums, int start){
lists.add(new ArrayList(list));
for(int i = start; i < nums.length; i++){
if(i> start && nums[i-1]==nums[i])
continue;
list.add(nums[i]);
process(list, nums, i+1);
list.remove(list.size()-1);
}
}