题目描述:
思路:
非常典型的递归题目,全量遍历即可。
class Solution {
public List<List<Integer>> listss = new ArrayList();
public List<Integer> lists = new ArrayList();
public List<List<Integer>> subsets(int[] nums) {
dfs(0, nums);
return listss;
}
public void dfs(int start, int[] nums) {
listss.add(new ArrayList(lists));
for (int i = start; i < nums.length; i++) {
lists.add(nums[i]);
dfs(i + 1, nums);
lists.remove(lists.size() - 1);
}
}
}
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> listss = new ArrayList<>();
List<Integer> lists = new ArrayList<>();
Stack<List<Integer>> stack = new Stack<>();
stack.push(lists);
listss.add(lists);
for(int i = 0; i < nums.length; i++) {
while(!stack.isEmpty()) {
List<Integer> list = stack.pop();
List<Integer> listTwo = new ArrayList<>(list);
listTwo.add(nums[i]);
listss.add(listTwo);
}
for(int j = 0; j < listss.size(); j++) {
stack.push(listss.get(j));
}
}
return listss;
}
}
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> listss = new ArrayList<>();
List<Integer> lists = new ArrayList<>();
listss.add(lists);
for(int i = 0; i < nums.length; i++) {
int length = listss.size();
for(int j = 0; j < length; j++) {
List<Integer> list = listss.get(j);
List<Integer> listTwo = new ArrayList<>(list);
listTwo.add(nums[i]);
listss.add(listTwo);
}
}
return listss;
}
}