LeetCode开心刷题四十三天——回溯专题78. Subsets 90. Subsets II60

78. Subsets
Medium
233557FavoriteShare

Given a set of distinct integers, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: nums = [1,2,3]
Output:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]
class Solution(object):
    def subsets(self,nums):
        """
        :param nums:List[int]
        :return: List[List[int]]
        """
        res=[]
        self.dfs(nums,0,res,[])
        return res

    def dfs(self,nums,start,res,path):
        res.append(path)
        for i in range(start,len(nums)):
            self.dfs(nums,i+1,res,path+[nums[i]])

 

90. Subsets II
Medium
106953FavoriteShare

Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).

Note: The solution set must not contain duplicate subsets.

Example:

Input: [1,2,2]
Output:
[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]
这两道题思路十分相像,后者难点在于有重复,如果是利用数据结构去重
比如map之类 的并不好,因为实际相当已经消耗了计算的时间,所以应该在shen
生成的时候就进行控制;
特别注意sort的用法
class Solution(object):
    def subsetsWithDup(self,nums):
        """
        :param nums:List[int]
        :return: List[List[int]]
        """
        res=[]
        cas=sorted(nums)
        # ans=sorted(nums)和nums.sort()用法 前者需要赋值,后者直接改变自身
        print(nums)
        print(cas)
        nums.sort()
        print(nums)
        self.dfs(nums,0,res,[])
        return res

    def dfs(self,nums,start,res,path):
        res.append(path)
        for i in range(start,len(nums)):
            if (i>start and nums[i]==nums[i-1]):continue
            self.dfs(nums,i+1,res,path+[nums[i]])

solu=Solution()
nums=[4,4,4,1,4]
print(solu.subsetsWithDup(nums))

 

 

 

BONUS:

python初学者,但我觉得四舍五入的说法应该是有问题的
Python中的//应该是向下取整的意思吧
a//b,应该是对a除以b的结果向负无穷方向取整后的数
5//2=2(2.5向负无穷方向取整为2),同时-5//2=-3(-2.5向负无穷方向取整为-3)

转载于:https://www.cnblogs.com/Marigolci/p/11541095.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值