leetcode: 递归 46.47 Permutations I II

题目 46 Permutations I

Given a collection of distinct integers, return all possible permutations.

Example:

Input: [1,2,3]

Output:

[

 [1,2,3],
        [1,3,2],
        [2,1,3],
        [2,3,1],
        [3,1,2],
        [3,2,1]
       ]

思路 

对于n个数,相当于先对前 n-1 个数排列,然后再把最后这个数插入到不同的位置

    def permute(self, nums: List[int]) -> List[List[int]]:
        if len(nums) == 0:
            return []
        elif len(nums) == 1:
            return [[nums[0]]]
        
        ans = []
        temp = self.permute(nums[1:])
        for item in temp:
            for i in range(len(item)+1):
                p = item.copy()
                p.insert(i,nums[0])
                ans.append(p)
    
        return ans    

 

题目 47 Permutations II

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

Example:

    Input: [1,1,2]
    Output:
    [
       [1,1,2],
       [1,2,1],
       [2,1,1]
    ]

思路

同样也是递归插入,不过在对每一项插入新数字时,如果遇到了与插入数字相同的数字,就可以终止了。因为对后面的空位而言,在上一次插入该数字时已经考虑过了,并列在了当前项中。

    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        if len(nums) == 0:
            return []
        elif len(nums) == 1:
            return [[nums[0]]]
        
        nums.sort()
        ans = []
        temp = self.permuteUnique(nums[1:])
        for item in temp:
            for i in range(len(item)+1):
                p = item.copy()
                p.insert(i,nums[0])
                ans.append(p)
                if i<len(item):
                    if nums[0] == item[i]:
                        break
        return ans               

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值