题目:
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]
]
题目翻译:
给出一串不同的数,列出它们所有的排列组合
题解:
此题使用递归的方法,即,回溯的方法。找规律发现,给出的列表的排列组合等于,头元素的排列组合加上除了头元素的排列组合,而每一个元素都有一次充当头元素的机会,故,算法如下:
注:由于这是用python写的,对ans使用的append方法,有一个隐藏的问题是,把每一个nums都append进去后,当nums改变时,ans中的值也会改变,所以ans中append进去的是nums的副本,即,用copy函数。
class Solution(object):
def permute(self,nums):
ans=[]
#使用递归
permutation(nums,0,len(nums),ans)
return ans
def permutation(nums,i,length,ans):
#当剩下仅有1个元素时,直接添加,无需再排列
if i==length-1:
temp=nums.copy()
ans.append(temp)
else:
for j in range(i,length):
temp=nums[j]
nums[j]=nums[i]
nums[i]=temp
permutation(nums,i+1,length,ans)
temp=nums[j]
nums[j]=nums[i]
nums[i]=temp
#这是测试部分,提交时不需要加
nums=[1,2,3,4]
print(Solution().permute(nums))