Leetcode 078 子集 Python C++ 史上最详细题解系列
2018-08-15 08:50
477 查看
每天更新一道python or C++ leetcode题,力求讲解清晰准确,客官们可以点赞或者关注。
题目:
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
思路:
观察到子集的长度为0,1,。。。。n不等,所以我们需要不断修改我们的递归条件,先把长度为0的子集全部添加进答案,接着是长度为1的,以此类推。
python:
[code]class Solution: def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ ans_list = [] nums.sort() for i in range(0, len(nums)+1):#外侧循环,用来控制终止条件,i=2就表示当子集长度为2时终止 self.findsub(i, ans_list, nums, []) return ans_list def findsub(self, k, ans_list, nums, one_res): if len(one_res) == k: ans_list.append(one_res) else: for i in nums: self.findsub(k, ans_list, nums[nums.index(i)+1:], one_res+[i])
C++
[code]class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> result; vector<int> path; result.push_back(path); if(nums.empty()) return result; subsets_dfs(nums,0,path,result); return result; } void subsets_dfs(vector<int>& nums,int pos,vector<int>& path,vector<vector<int>>& result) { if(pos==nums.size()) return; for(int i=pos;i<nums.size(); i++) { path.push_back(nums[i]); result.push_back(path); subsets_dfs(nums,i+1,path,result); path.pop_back();//与第77题非常类似,C++的回溯一般需要手动完成,而不像python可以直接写在参数里 } } };
总结:python用slice对数组切片,而在C++中我们需要start指针,并且往往需要手动完成回溯。
阅读更多
相关文章推荐
- Leetcode 079 搜索单词 Python C++ 史上最详细题解系列
- Leetcode 80 删除排序数组中的重复项 II Python C++ 史上最详细题解系列
- Leetcode 83 删除排序链表中的重复元素 Python C++ 史上最详细题解系列
- Leetcode 81 搜索旋转排序数组 II Python C++ 史上最详细题解系列
- Leetcode 82 删除排序链表中的重复元素 II Python C++ 史上最详细题解系列
- Leetcode 312 打气球 Burst Balloons C++ 史上最详细题解系列
- [LeetCode]题解(python):078-Subsets
- leetcode_效率题解_[python/C++]_147. Insertion Sort List(链表插入排序)
- [LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql)
- leetcode_效率题解_[python/C++]_21. Merge Two Sorted Lists(合并2个有序链表)
- LeetCode题解汇总(C++ Java Python,含题目翻译)
- LeetCode 167. Two Sum II - Input array is sorted 题解(C++)
- Leetcode_populating-next-right-pointers-in-each-node(updated c++ and python version)
- leetcode 27 题解 翻译 Python版
- [LeetCode]题解(python):116-Populating Next Right Pointers in Each Node
- Leetcode 206 Reverse Linked List(C++/python)
- [LeetCode]题解(python):040-Combination Sum II
- [LeetCode] 003. Longest Substring Without Repeating Characters (Medium) (C++/Java/Python)
- leetcode3题 题解 翻译 C语言版 Python版
- [LeetCode]题解(python):147-Insertion Sort List