Leetcode 90.子集II(回溯)—— python

1. 题目描述

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。

示例:
输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]

2. 解题思路

这题思路也是回溯法,跟题目求子集https://blog.csdn.net/u013075024/article/details/93631767有类似的思路。不同的是这题要求子集不重复,所以先对原始数组进行排序,然后在加入列表之前判断该子集是否存在,若不存在,则加入。

3.代码实现

class Solution:
    def subsetsWithDup(self, nums):
        self.res = []
        self.search(sorted(nums), 0,self.res, [])
        return self.res

    def search(self, nums, index, res, temp):
        if(index == len(nums)):
            if(temp not in res):
                res.append(temp)
            return
        self.search(nums, index+1, res, temp + [nums[index]])
        self.search(nums, index+1, res, temp)
发布了77 篇原创文章 · 获赞 9 · 访问量 6750

猜你喜欢

转载自blog.csdn.net/u013075024/article/details/96006703