zoukankan      html  css  js  c++  java
  • LeetCode Subsets II

    LeetCode解题之Subsets II


    原题

    罗列出一个包括反复数字的集合的全部的子集。

    注意点:

    • 子集中的元素须要依照不降序排列
    • 结果集中不能反复

    样例:

    输入: nums = [1,2,2]

    输出:

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

    解题思路

    Subsets 迭代版本号的基础上思考。在迭代反复元素的时候会生成反复的结果,那么在迭代反复元素时要特殊处理一下。就拿[1,2,2]来说,在迭代完1之后结果集为[[], [1]],迭代第一个2后。[[], [1], [2], [1,2]]。接下来就要迭代反复的元素2了。此时假设遍历在迭代第一个2之前就存在的结果集元素([[], [1]])时,就会产生反复,我们仅仅能在上一轮迭代产生的新的结果中继续加入。所以要一个额外的变量来表示在结果集中的哪个位置開始遍历。

    AC源代码

    class Solution(object):
        def subsetsWithDup(self, nums):
            """
            :type nums: List[int]
            :rtype: List[List[int]]
            """
            result = [[]]
            nums.sort()
            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)
                for j in range(start, temp_size):
                    result.append(result[j] + [nums[i]])
            return result
    
    
    if __name__ == "__main__":
        assert Solution().subsetsWithDup([1, 2, 2]) == [[], [1], [2], [1, 2], [2, 2], [1, 2, 2]]

    欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源代码。

  • 相关阅读:
    并发工具类的使用 CountDownLatch,CyclicBarrier,Semaphore,Exchanger
    多线程按顺序执行3个方法
    读写锁事例
    使用AQS自定义重入锁
    java 几种锁实现
    Nginx 安装
    Windows 安装mysql
    day--14前端(HTML、CSS)
    day13--开发堡垒机
    day12--python操作mysql
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7290952.html
Copyright © 2011-2022 走看看