題目:輸入一個(gè)集合,輸出他的子集
舉例:輸入集合[1,2],輸出它的所有子集為[[], [1], [2], [1, 2]]
解題思路:1.采用位運(yùn)算;2.對于集合中的每一位元素,只有兩種狀態(tài)[輸出,不輸出],用1代表輸出,用0代表不輸出;3.共有2^[集合個(gè)數(shù)]次;4.計(jì)算兩次,一次&運(yùn)算,一次>>運(yùn)算
語言:java
代碼如下:
public class Test{
public static List<List<Integer>> getSubSet(List<Integer> list) {
if (null == list || list.isEmpty()) {
return new ArrayList<>();
}
List<List<Integer>> result = new ArrayList<>();
for (int i = 0, size = (int) Math.pow(2, list.size()); i < size; i++) {
List<Integer> subSet = new ArrayList<>();
int index = i;
for (int j = 0; j < list.size(); j++) {
if ((index & 1) == 1) {
subSet.add(list.get(j));
}
index >>= 1;
}
result.add(subSet);
}
return result;
}
public static void main(String[] args){
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
System.out.println(getSubSet(list));
}
}