zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):090 Subsets II

    题目来源


    https://leetcode.com/problems/subsets-ii/

    Given a collection of integers that might contain duplicates, nums, return all possible subsets.

    Note:

    • Elements in a subset must be in non-descending order.
    • The solution set must not contain duplicate subsets.

    题意分析


    Input:

         :type nums: List[int]

    Output:

       :rtype: List[List[int]]

    Conditions:返回一个list的所有子集,注意list中的元素可以是重复的,但是要求返回的子集不重复,子集中的元素顺序为非降序。


    题目思路


    用dfs,同78题,只是在增加一个子集的时候,判断是否已经存在这个子集再增加。

    附注:在扩展子集的时候,可以采用不断增加一个元素,并且先对list进行排序,每次增加时只遍历当前位置之后的元素,这样就可以避免重复。


    AC代码(Python)


     1 class Solution(object):
     2     def subsetsWithDup(self, nums):
     3         """
     4         :type nums: List[int]
     5         :rtype: List[List[int]]
     6         """
     7         def dfs(depth, start, valueList):
     8             if valueList not in res:
     9                 res.append(valueList)
    10             if depth == len(nums):
    11                 return
    12             for i in range(start, len(nums)):
    13                 dfs(depth + 1, i + 1, valueList+[nums[i]])
    14         
    15         nums.sort()
    16         res = []
    17         dfs(0, 0, [])
    18         return res
  • 相关阅读:
    Android 手势&触摸事件
    vim常用命令总结
    关于背景中的雪花
    博客园美化——看板娘
    组合数
    扩展欧几里得和求逆元
    dfs序
    RMQ问题
    NOIP2017 列队
    线段树详解
  • 原文地址:https://www.cnblogs.com/loadofleaf/p/5395066.html
Copyright © 2011-2022 走看看