1.递归解法
对于数组中的每一个数,遍历后都有2种可能即放入list或者不放入list,所以我们只要每次对nums中的数进行判断即可。如果存在则进行递归并放入lists集合中
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> lists = new ArrayList<>();
List list = new ArrayList<Integer>();
fun(lists,list,nums,0);
return lists;
}
public void fun(List<List<Integer>> lists,List list,int nums[],int n)
{
lists.add(new ArrayList<Integer>(list));
for(int i=n;i<nums.length;i++)
{
list.add(nums[i]);
fun(lists,list,nums,i+1);
list.remove(list.size()-1);
}
}
非递归解法
现将要输出的lists中传入空集合,再对数组进行遍历,对于lists中每个元素加上遍历到的nums[i],例如第一次为[],第二次为[],[1],第三次为[],[1],[2,[1,2]以此类推
List<List<Integer>> lists=new ArrayList<>();;
List list=new ArrayList<Integer>();
lists.add(list);
for(int i=0;i<nums.length;i++)
{
int n=lists.size();
for(int j=0;j<n;j++)
{
list=new ArrayList(lists.get(j));
list.add(nums[i]);
lists.add(list);
// System.out.println( lists.get(i+n));
}
}
return lists;
// }