您的位置:首页 > 其它

LintCode 18. 带重复元素的子集

2018-02-06 22:09 239 查看

题目

给定一个可能具有重复数字的列表,返回其所有可能的子集

注意事项

子集中的每个元素都是非降序的

两个子集间的顺序是无关紧要的

解集中不能包含重复子集

您在真实的面试中是否遇到过这个题?

Yes

样例

如果 S = [1,2,2],一个可能的答案为:

[

[2],

[1],

[1,2,2],

[2,2],

[1,2],

[]

]

挑战

你可以同时用递归与非递归的方式解决么?

标签

递归

思路

基础DFS,加入一个数字判断条件,当数字加入过subset就跳过。

代码

class Solution:
"""
@param: nums: A set of numbers.
@return: A list of lists. All valid subsets.
"""
def __init__(self):
self.res_list = []
def dfs(self, subset, start_index, nums):
self.res_list.append(subset[:])
used = [0 for i in range(-9, 10)]
for i in range(start_index, len(nums)):
if not used[nums[i]]:
used[nums[i]] = 1
subset.append(nums[i])
self.dfs(subset, i + 1, nums)
subset.pop(-1)
def subsetsWithDup(self, nums):
# write your code here
nums.sort()
self.dfs([], 0, nums)
return self.res_list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: