求子集和全排列的python开挂工具itertools

python求子集和全排列

例题1:

在这里插入图片描述
这个问题,标准做法是用回溯算法。但是我最近发现了一个简单的技巧,因此在这里记录一下。

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        res = [[],]
        for i in range(1,len(nums)+1):
            for tup in itertools.combinations(nums, i):
            #combinations的作用是返回nums中所有长度为i的子序列
            #如果允许生成的答案中有重复元素,如[1,1],则可以使用combination_with_replace(nums,i)函数
                res.append(list(tup))
        
        return res

例题2

在这里插入图片描述

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        length=len(nums)
        res=[]
        for path in permutations(nums,length):
        #返回nums中任意取length个元素做排列的元组的迭代器
            res.append(list(path))
        return res

记住,由itertools返回的都是元组,需要再次转换成列表后加入到答案中去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值