题目描述:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
错误解法1:
public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());
for(int num : nums) {
for(int i = 0; i < result.size(); i++) {
List<Integer> temp = result.get(i);
temp.add(num);
result.add(temp);
}
}
return result;
}
每次往temp中加num,所有result中的temp都会加上num。
错误解法2:
public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());
for(int num : nums) {
for(int i = 0; i < result.size(); i++) {
List<Integer> temp = new ArrayList<>(result.get(i));
temp.add(num);
result.add(temp);
}
}
return result;
}
i永远小于result.size(),因为每次循环result.size()也会增加
正确解法:
public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());
for(int num : nums) {
int size = result.size();
for(int i = 0; i < size; i++) {
List<Integer> temp = new ArrayList<>(result.get(i));
temp.add(num);
result.add(temp);
}
}
return result;
}