全排列
举个例子,比如你要对a,b,c三个字符进行全排列,那么它的全排列有abc,acb,bac,bca,cba,cab这六种可能,你们想想你们是如何得出这六种可能的。没错!就是当指针指向第一个元素a时,它可以是其本身a(即和自己进行交换),还可以和b,c进行交换,故有3种可能,当第一个元素a确定以后,指针移向第二位置,第二个位置可以和其本身b及其后的元素c进行交换,又可以形成两种排列,当指针指向第三个元素c的时候,这个时候其后没有元素了,此时,则确定了一组排列,输出。但是每次输出后要把数组恢复为原来的样子。
简单来说,它的思想即为,确定第1位,对n-1位进行全排列,确定第二位,对n-2位进行全排列。。。显然,这是一种递归的思想。
原文链接:https://blog.csdn.net/qq_31601743/article/details/82053201
1 def solution(nums,start,end): 2 if start == end: 3 print(nums) 4 else: 5 for i in range(start,end): 6 nums[i],nums[start]=nums[start],nums[i] 7 solution(nums,start+1,end) 8 nums[i],nums[start]=nums[start],nums[i] 9 nums = [1,2,3,4] 10 solution(nums,0,4)