public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> lists = new ArrayList<>();
backtrack(0, nums, lists, new ArrayList<Integer>());
return lists;
}
private static void backtrack(int i, int[] nums, List<List<Integer>> lists, ArrayList<Integer> list) {
lists.add(new ArrayList<>(list));
for (int j = i; j < nums.length; j++) {
list.add(nums[j]);
backtrack(j + 1, nums, lists, list);
list.remove(list.size() - 1);
}
}
使用位运算
public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> lists = new ArrayList<>();
ArrayList<Integer> list = new ArrayList<>();
int len =1 << nums.length;
for (int i = 0; i <len ; i++) {
for (int j = 0; j <nums.length ; j++) {
if((i &(1<<j))==0){
list.add(nums[j]);
}
}
lists.add(new ArrayList<>(list));
list.clear();
}
return lists;
}