版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
17. 子集
给定一个含不同整数的集合,返回其所有的子集。
样例
样例 1:
输入:[0]
输出:
[
[],
[0]
]
样例 2:
输入:[1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
挑战
你可以同时用递归与非递归的方式解决么?
注意事项
子集中的元素排列必须是非降序的,解集必须不包含重复的子集。
public class Solution {
/**
* @param nums: A set of numbers
* @return: A list of lists
*/
public List<List<Integer>> subsets(int[] nums) {
// write your code here
ArrayList<List<Integer>> res= new ArrayList<>();
if(nums==null ){
return res;
}
res.add(new ArrayList<>());
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
for(int j=0;j<Math.pow(2,i);j++){//每一层的个数都是2的n次方
ArrayList<Integer>temp2=new ArrayList<Integer>(res.get(j));
temp2.add(temp2.size(),nums[i]);
res.add(temp2);//加入一个数,放进去
}
}
return res;
}
}
------------------------------------------------------------------------------------------------------------
思路, 遍历数组里面所有的元素,每次取出第一个list,往里面加入,或者不加入
for(int j=0;j<Math.pow(2,i);j++){//每一层的个数都是2的n次方,看图,每多一个元素,都是多一次平方