给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。
- 示例:
-
- 输入: nums = [1,2,3]
- 输出:
- [
- [3],
- [1],
- [2],
- [1,2,3],
- [1,3],
- [2,3],
- [1,2],
- []
- ]
-
public class Solution1 {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();
ans.add(new ArrayList<Integer>());
res.add(new ArrayList<Integer>());
int n = nums.length;
// 第一层循环,子数组长度从 1 到 n
for (int i = 1; i <= n; i++) {
List<List<Integer>> tmp = new ArrayList<List<Integer>>();
// 第二层循环,遍历上次的所有结果
for (List<Integer> list : res) {
// 第三次循环,对每个结果进行扩展
for (int m = 0; m < n; m++) {
//只添加比末尾数字大的数字,防止重复
if (list.size() > 0 && list.get(list.size() - 1) >= nums[m])
continue;
List<Integer> newList = new ArrayList<Integer>(list);
newList.add(nums[m]);
tmp.add(newList);
ans.add(newList);
}
}
res = tmp;
}
return ans;
}
}