Leetcode 78 子集
2023-12-13 08:50:56
题意理解:
? ? ? ? 求一个集合的所有子集。该集合中没有重复元素。
? ? ? ? 首先明确什么是子集:子集中的元素都在全集里。
????????[1,2,3]
? ? ? ? 子集:[]、[1]、[2]、[3]、[12]、[13]、[23]、[123]
? ? ? ? 注意:[]空集是所有集合的子集。
解题思路:
? ? ? ? 类似于组合、划分类问题,都可以以回溯的思路来解决。
? ? ? ? 首先可以将其抽象为树结构。
可以发现:该树的每一个节点都是一个子集。在所有节点收集结果,即可解题。
1.暴力回溯+剪枝优化
?我们需要在每一个节点收集结果。根据回溯的三个步骤解题:
? ? ? ? 首先确定返回值和参数列表:其实通常返回值都是void
? ? ? ? 确定终止条件
? ? ? ? 单层递归逻辑
? 因为要收集的结果在所有的节点上,实际上,每进一次递归就相当于一个节点。所有每次进递归时都收集结果。
List<List<Integer>> result=new ArrayList<>();
LinkedList<Integer> path=new LinkedList<>();
public List<List<Integer>> subsets(int[] nums) {
backtracking(nums,0);
return result;
}
public void backtracking(int[] nums,int startIndex){
//结果收集
result.add(new ArrayList<>(path));
if(startIndex>=nums.length) return;
//单层递归逻辑
for(int i=startIndex;i<nums.length;i++){
path.add(nums[i]);
backtracking(nums,i+1);
path.removeLast();
}
}
2.分析
时间复杂度:O()
空间复杂度:O(n)
????????
文章来源:https://blog.csdn.net/lt_BeiMo/article/details/134952588
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!