一、问题简介
全排列问题,既给定一个序列,输出原始序列中的元素全部可能的排列顺序
比如,给定序列[1,2,3]
全排列:
二、递归方法
对于给定的序列,要得到全排列的新的序列,那么对每一个新序列,第一个元素的不同就可以认为序列不同(不考虑存在重复元素的情况)
主要思路:
当第一个元素完成交换后,将第一个元素排除在外,从第二个元素开始,与后面所有元素进行交换,以此产生递归
import copy
def full_permunation(nums, start, end, full):
if start == end:
permunation = copy.deepcopy(nums)
full.append(permunation)
else:
for i in range(start, end):
nums[i], nums[start] = nums[start], nums[i]
full_permunation(nums, start+1, end, full)
nums[i], nums[start] = nums[start], nums[i]
return full
full = []
nums = [1,2,3]
full_permunations = full_permunation(nums, 0, len(nums), full)
print(full_permunations)
运行结果:[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]