[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
list.add(new ArrayList<>(tempList)); for(int i = startLen ; i < len ; i++){ tempList.add(nums[i]); getSubset(list,tempList,i+1,nums,len); tempList.remove(tempList.size()-1); }
private static void getSubset(List<List<Integer>> list, List<Integer> tempList, int startLen, int[] nums, int len)
参考代码
package leetcode_100; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /*** * * @author pengfei_zheng * 求集合的所有子集 */ public class Solution78 { public static List<List<Integer>> subsets(int[] nums) { List<List<Integer>> list = new ArrayList<>();//record the final answer List<Integer> tempList = new ArrayList<>();//record one of the subSet Arrays.sort(nums); int len = nums.length;//prevent calculating the length in the function getSubset(list, tempList, 0, nums, len);//calling the backtrack function return list; } private static void getSubset(List<List<Integer>> list, List<Integer> tempList, int startLen, int[] nums, int len) { list.add(new ArrayList<>(tempList));//by calling itself to add tempList to the list for(int i = startLen ; i < len ; i++){ tempList.add(nums[i]);// add element to tempList getSubset(list,tempList,i+1,nums,len);//calling itself tempList.remove(tempList.size()-1);//backtrack and remove the top element in tempList } } public static void main(String[]args){ int []nums = {0,1,2,3}; List<List<Integer>> list = subsets(nums); int len = list.size(); for(int i = 0 ; i < len; i++){ System.out.println(list.get(i)); } } }