大家好,又见面了,我是你们的朋友全栈君。
全排列:当n==m时,称为全排列;
取出数组中第一个元素放到最后,即a[1]与a[n]交换,然后递归求a[n-1]的全排列
1)如果数组只有一个元素n=1,a={1} 则全排列就是{1}
2)如果数组有两个元素n=2,a={1,2} 则全排列是:
{2,1}–a[1]与a[2]交换。交换后求a[2-1]={2}的全排列,归结到1)
{1,2}–a[2]与a[2]交换。交换后求a[2-1]={1}的全排列,归结到1)
3)如果数组有三个元素n=3,a={1,2,3} 则全排列是
{
{2,3},1}–a[1]与a[3]交换。后求a[3-1]={2,3}的全排列,归结到2)
{
{1,3},2)–a[2]与a[3]交换。后求a[3-1]={1,3}的全排列,归结到2)
{
{1,2},3)–a[3]与a[3]交换。后求a[3-1]={1,2}的全排列,归结到2)
…
依此类推。
COUNT=0def perm(n,begin,end): global COUNT if begin>=end: print n COUNT +=1 else: i=begin for num in range(begin,end): n[num],n[i]=n[i],n[num] perm(n,begin+1,end) n[num],n[i]=n[i],n[num]n=[1,2,3,4]perm(n,0,len(n))print COUNT
最后输出的结果如下:
======================== RESTART: D:/Python27/perm.py ========================
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 2, 3]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 3, 1]
[2, 4, 1, 3]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 2, 3, 1]
[4, 2, 1, 3]
[4, 3, 2, 1]
[4, 3, 1, 2]
[4, 1, 3, 2]
[4, 1, 2, 3]
24
>>>
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/148493.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...