class Solution {
List<Integer> t = new ArrayList<Integer>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();
public List<List<Integer>> subsets(int[] nums) {
dfs(0,nums);
return ans;
}
public void dfs(int cur, int[] nums){
if(cur == nums.length){
ans.add(new ArrayList<Integer>(t));
return;
}
t.add(nums[cur]); // t.add(nums[0])
System.out.print(cur);
dfs(cur+1, nums);
t.remove(t.size() - 1);
dfs(cur+1,nums);
}
}
leetcode 78. 子集 这方法怎么得到结果的啊,没看懂
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- qq_34370249 2021-10-14 17:18关注
递归调用,
解释一下dfs方法
参数 cur 当前便拎数组的下标,nums数组
if -》如果,cur和数组的长度一致,退出,(这是递归退出的条件,也就是说,当数组的长度== 0 或者 cur走到了数组的最后一位时,退出)
t.add -> 将下标为cur的元素,放在t中
dfs 重复 之前的步骤,(递归调用)
t.remove -> 移除t中的最后一个元素
dfs 重复之前的步骤,(递归调用)举个例子
数组[1,2,3],来说
第一次进入dfs方法时- cur = 0
0 != 3
t.add(1); // t = {1}
进入dfs方法- cur = 1
1 != 3
t.add(2)
进入dfs方法
重复以上步骤,就出来了cur = 2 3. 2 != 3 t.add(3) // t = {1,2,3} 进入dfs方法 4. 3 ==3 把这个t放入ans中, 此时 ans = {(1,2,3)} 退出,回到第三步 删除t中的最后一个元素 t.remove() // t = {1,2} 在进入dfs方法, 此时cur ==3 将{1,2}放入ans
- cur = 1
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 - cur = 0
悬赏问题
- ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
- ¥20 设计一个二极管稳压值检测电路
- ¥15 内网办公电脑进行向日葵
- ¥15 如何输入双曲线的参数a然后画出双曲线?我输入处理函数加上后就没有用了,不知道怎么回事去掉后双曲线可以画出来
- ¥50 WPF Lidgren.Network.Core2连接问题
- ¥15 soildworks装配体的尺寸问题
- ¥100 有偿寻云闪付SDK转URL技术
- ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
- ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
- ¥15 远程安装一下vasp