【Leetcode】【python】Subsets/Subsets II
2017-10-21 05:36
405 查看
Subsets
题目大意
给定一个由不同数字组成的集合,罗列出该集合的所有子集。解题思路
见下方代码代码
纯思路
参考:https://shenjie1993.gitbooks.io/leetcode-python/078%20Subsets.html
举个例子,集合[1]有[[],[1]]两个子集,当向其中添加一个元素时,[1,2]有[[],[1],[2],[1,2]]四个子集,可以看出来,在新添加一个元素的时候,是在原来子集的基础上,添加原子集中所有元素加上新元素的总集合。为了每个子集中的元素都是不降序的,要先把所有元素都排序。
class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ result = [[]] for num in sorted(nums): result += [item + [num] for item in result] return result
沿用排列题DFS
class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ self.result = [] nums.sort() for i in range(0, len(nums)+1): self.k = i self.combineHelper(0, [], nums) return self.result def combineHelper(self, length, temp, list_num): # print 'start', temp, list_num, length, self.k if length == self.k: # print 'add', temp self.result.append(temp[:]) # 这里直接写temp,就会导致result内的temp永远是一个实例,后面修改temp会使得result一直在变化 # print 'result', self.result return for i, num in enumerate(list_num): temp.append(num) # print temp, list_num[i+1:] # print '-------' self.combineHelper(length+1, temp, list_num[i+1:]) temp.pop()
Subsets II
题目大意
给定一个由不同数字组成的集合,罗列出该集合的所有子集。有重复
解题思路
和上一题相同,问题在于如果有重复则会生成多余的子集。参考:https://shenjie1993.gitbooks.io/leetcode-python/078%20Subsets.html
现在举个例子,集合[1]有[[],[1]]两个子集,当向其中添加一个元素时,[1,2]有[[],[1],[2],[1,2]]四个子集,可以看出来,在新添加一个元素的时候,是在原来子集的基础上,添加原子集中所有元素加上新元素的总集合。为了每个子集中的元素都是不降序的,要先把所有元素都排序。
代码
class Solution(object): def subsetsWithDup(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ result = [[]] nums.sort() # sort()直接修改原数组,sorted()返回排序后的数组,不修改原数组 temp_size = 0 for i in range(len(nums)): start = temp_size if i >= 1 and nums[i] == nums[i - 1] else 0 temp_size = len(result) # 每次取到result最后一位,也就是从start一直到最后一位 print start, temp_size for j in range(start, temp_size): result.append(result[j] + [nums[i]]) print result return result
总结
纯思路做法显然效率更高,此题标签还有位运算做法,有空。相关文章推荐
- [LeetCode]Subsets II@python
- [leetcode]Subsets II @ Python
- [Leetcode]@python 90. Subsets II.py
- Find Minimum in Rotated Sorted Array II Leetcode Python
- [LeetCode]题解(python):081-Search in Rotated Sorted Array II
- LeetCode OJ Subsets II
- [LeetCode] 82. Remove Duplicates from Sorted List II 从分类列表中删除重复项目 II @python
- 81. Search in Rotated Sorted Array II Leetcode Python
- leetcode 【 Unique Paths II 】 python 实现
- leetcode -- Subsets I &II-- 重点,求0,1序列
- 【Leetcode】【python】Pascal's Triangle, Pascal's Triangle II
- Leetcode_pascals-triangle-ii (updated c++ and python version)
- [leetcode]N-Queens II @ Python
- Leetcode_best-time-to-buy-and-sell-stock-ii(c++ and python version)
- 90. Subsets II LeetCode
- leetcode @python 119. Pascal's Triangle II
- [LeetCode][Python]Intersection of Two Arrays II
- leetcode Jump Game II python
- 119. Pascal's triangle II Leetcode Python
- [Leetcode]@python 95. Unique Binary Search Trees II