78 Subsets
Given a set of distinct integers, nums, return all possible subsets.
Note: Elements in a subset must be in non-descending order. The solution set must not contain duplicate subsets. For example, If nums = [1,2,3], a solution is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
Analysis
Bug
1.对接口的实例化:
//实例最外层即可
List<List<Integer>> res = new ArrayList<List<Integer>>();
Queue<List<Integer>> q = new LinkedList<List<Integer>>();
//未实例化的对象用接口型的Reference
List<Integer> al = q.poll();
Code
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
Queue<List<Integer>> q = new LinkedList<List<Integer>>();
//create a hash map to store nums' index info
Map<Integer, Integer> indexOfnums = new HashMap<Integer, Integer>();
//initialize
q.add(new ArrayList<Integer>());
Arrays.sort(nums);
//store index of every int in nums[]
for(int i=0; i<nums.length; i++) {
indexOfnums.put(nums[i], i);
}
//funny part
while(!q.isEmpty()) {
int sizeOfcurrentLevel = q.size();
for(int i=0; i < sizeOfcurrentLevel; i++) {
List<Integer> al = q.poll();
res.add(al);
//find the index of int who need to be appended
int index = 0;
if(al.size() != 0){
Integer last = al.get( al.size() - 1 );
index = indexOfnums.get(last) + 1;
}
else {
index = 0;
}
//if nums[index] is a valid index, append all int to al
if(index < nums.length) {
for(int j= index; j < nums.length; j++) {
ArrayList<Integer> temp = new ArrayList<Integer>(al);
temp.add(nums[j]);
q.add(temp);
}
}
}
}
return res;
}