相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
class Solution {
public List<List<Integer>> subsets(int[] nums) {
int len = nums.length;
if (len==0){
return null;
}
List<List<Integer>> list = new ArrayList<>();//最终返回结果
Deque<Integer> res = new ArrayDeque<Integer>();//创建栈
subsetsDfs(nums,len,0,res,list);
return list;
}
private void subsetsDfs(int[] nums, int len, int index, Deque<Integer> res, List<List<Integer>> list) {
if (index==len){//当index == len 说明到最后一层的叶子结点,存储进list中
list.add(new ArrayList<>(res));
return;
}
subsetsDfs(nums,len,index+1,res,list);//这里是递归到下一层,但是不加这一层的num[index]进res
res.addLast(nums[index]);//这里是添加这一层的num[index]进res
subsetsDfs(nums, len, index+1, res, list);//这里是递归到下一层
res.removeLast();//上面的递归结束后,说明已经到叶子结点过,然后就要回溯,删除刚刚添加的num[index]
}
}