Subsets2

题目

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

注意事项

子集中的每个元素都是非降序的
两个子集间的顺序是无关紧要的
解集中不能包含重复子集

test case

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

[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]

思路

eg:

{1,2',2''}
取{1,2'} {2',2''} 
不取 {1,2''} {2'',2‘}
"""
重复的数选取第一次出现的,所以只需要在循环中进行处理,对于不取的情况进行跳过。
判断条件就是
数组不越界
前后两个字符相等
当前字符不是一次出现即 不等于startIndex
"""

结果


class Solution:
    """
    @param S: A set of numbers.
    @return: A list of lists. All valid subsets.
    """

    def subsetsWithDup(self, S):
        # write your code here
        result = []
        if (S is None):
            return result

        def subSetsHelper(nums, startIndex, temp_list, ret):
            # 生成新对象
            ret.append([] + temp_list)
            for i in range(startIndex, len(nums)):
                # 先添加,再移除
                # 判断跳过的循环
                if (i != 0 and nums[i] == nums[i - 1] and i != startIndex):
                    continue
                temp_list.append(nums[i])
                subSetsHelper(nums, i + 1, temp_list, ret)
                temp_list.pop()

        S.sort()
        subSetsHelper(S, 0, [], result)
        return result


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,955评论 1 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,509评论 0 5
  • 去年有段时间得空,就把谷歌GAE的API权威指南看了一遍,收获颇丰,特别是在自己几乎独立开发了公司的云数据中心之后...
    骑单车的勋爵阅读 20,760评论 0 41
  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    时光清浅03阅读 516评论 0 0
  • 文 //北张男孩 一对夫妻结婚20多年,要协议离婚,婚前恩恩爱爱,婚后却争吵不断,总是意见不合感情生活越来越不和谐...
    北张男孩阅读 603评论 0 4