全排列

举个例子,比如你要对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)

子集问题https://www.cnblogs.com/NPC-assange/p/11457754.html

posted @ 2020-01-09 09:23  Assange  阅读(182)  评论(0编辑  收藏  举报