【leetcode-Python】- 回溯(带模板)-46 Permutations

目录

 

题目链接

题目描述

示例

解决思路一

Python实现

解决思路二

Python实现

解题思路三

Python实现

参考


题目链接

46. Permutations

题目描述

给定数组nums,其元素均为互不相等的整数,返回数组元素所有可能的排列结果。

示例

输入:nums=[1,2,3]

输出:[ [1,2,3] , [1,3,2] , [2,1,3] , [2,3,1] , [3,1,2] , [3,2,1]]

输入:nums = [0,1]

输出:[ [0,1] , [1,0]

输入:nums = [1]

输出:[ [1] ]

解决思路一

利用递归思想实现。在写递归函数recursion_permute(nums)时,首先确定函数功能为返回nums的所有排列结果;递归结束条件为nums的长度为2,因为此时能够直接得到长度为2的数组元素的排序结果。根据索引遍历数组,遍历到nums[i]时,调用下一层递归时传入nums[0:i]+nums[i+1:],即nums中除nums[i]之外所有元素组成的列表,返回这些元素的所有排列结果,然后再和nums[i] 做拼接。

举个例子,给定nums = [1,2,3,4],i = 0时,调用recursion_permute([2,3,4]),函数再经过一次递归操作后返回[2,3,4]的所有排列结果,和nums[0]做拼接。i = 1时调用recursion_permute([1,3,4]),函数通过再一层递归操作后返回[1,3,4]的所有排列结果,和nums[1]做拼接......最后返回所有拼接结果。

Python实现

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        return_list = []
        #递归函数
        def recursion_permute(nums):
            deep_return = []
            len_num = len(nums)
            if(len_num == 2):#递归结束条件:如果nums长度为2,能够直接返回两个元素排列的结果
                deep_return.append(nums)
                deep_return.append([nums[1],nums[0]])
                return deep_return
            else:
                for i in range(0,len_num):#如果nums长度大于2,进行遍历,相当于固定nums[i]
                    tmp_return = recursion_permute(nums[0:i]+nums[i+1:]) #返回nums除nums[i]之外所有元素的排列结果
                    for item in tmp_return:
                    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值