1、题目
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-set-lcci
2、解题思路
[1, 2, 3] 有三位, 用二进制表示就是 000, 001, 010, 011, 100, 101, 110, 111 代表了全部子集。所以我们可以利用位运算来进行求解。
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> returnList = new ArrayList();
int total = 1 << nums.length;
for(int i = 0;i <total; i++){
List<Integer> list = new ArrayList();
int temp = i;
if(temp != 0){
int index = 0;
while(temp != 0){
if((temp & 1) == 1){
list.add(nums[index]);
}
temp = temp >> 1;
index++;
}
}
returnList.add(list);
}
return returnList;
}
}