leetcode46&47 全排列

46和47题都是全排列问题,唯一区别就是,47题有重复的元素,所以需要在最后将重复的组合删掉。

46题:

class Solution:
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = [[n]+p for i,n in enumerate(nums) for p in 
               self.permute(nums[:i]+nums[i+1:])] or [[]]
        return res

【注意】:这里的or [[]]一定不能忘,否则当for p in []时,无论加的[n]是什么,结果都为[]!!


47题:

class Solution:
    def permuteUnique(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        nums.sort()
        res=[]
        self.dfs(nums,[],res)
        return res
    
    def dfs(self,nums,path,res):
        if len(nums)==0:
            res.append(path)
        for i in range(len(nums)):
            if i>0 and nums[i]==nums[i-1]:  #这句避免了重复!
                continue
            self.dfs(nums[:i]+nums[i+1:],path+[nums[i]],res)

猜你喜欢

转载自blog.csdn.net/aaon22357/article/details/84196981
今日推荐