目录
题目链接
题目描述
给定数组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[