该思路易于理解,但时间复杂度不行,后续可以利用回溯算法优化。
public static void main(String[] args) {
//[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
System.out.println(subsets(new int[]{1, 2, 3}));
//[[],[0]]
System.out.println(subsets(new int[]{0}));
}
public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> subsetList = new ArrayList<>();
//每个例子都有一个空集合
subsetList.add(new ArrayList<>());
for (int i = 0; i < nums.length; i++) {
//在一次循环前确定集合长度,防止集合长度不断增长,陷入死循环:for (int j = 0; j < subsetList.size(); j++)
int size = subsetList.size();
for (int j = 0; j < size; j++) {
//符合题目要求:不是[1],[1,2],[2],是[1],[2],[1,2]
List<Integer> temp = new ArrayList<>(subsetList.get(j));
temp.add(nums[i]);
subsetList.add(temp);
}
}
return subsetList;
}