获取序列全排列Java,求一组序列的全排列

该博客提供了一个Python函数`permutation`,用于计算整数的全排列数或数组的全排列集合。函数支持设置是否允许元素重复出现,并分别展示了全排列数、组合数以及考虑重复元素的全排列示例。示例中包括了数字和字符串数组的排列计算。
摘要由CSDN通过智能技术生成

#!/usr/bin/python#-*- coding:GBK -*-defpermutation(arr,n=None,duplicate=False):"""arr : 如果是数字,则返回全排列数;如果是数组,则返回全排列集合

n : 元素个数,默认全排列

duplicate: 同一个元素是否可以放在多个位置,默认不允许

注释:如果允许元素重复,n 个位置,每个位置 size 种选法,排列数 size ** n"""#需要排列的数目,默认全排列if(n==None):if(type(arr)isint):n=arrelse:n=len(arr)#元素数目if(type(arr)isint):size=arrelse:size=len(arr)if(n<1):raiseException,'Error: n size):raiseException,'Error: n > len(arr)'#第一个元素是数字,则返回全排列数目if(type(arr)isint):if(duplicate):returnsize**nelse:

result=size

temp=size-1while((size-temp)

result=result*temp

temp=temp-1returnresult#循环计数器,一层一个,共 n  个,都初始化为 0repeat_count=[0foriinrange(0,n)]#当前正在循环的层layer=0#随着计数器和层数不停变化的临时组合,N 维数组v_temp=[Noneforiinrange(0,n)]

result=[]#当前在第 0 层,且第 0 层计数器达到末尾时退出循环while(repeat_count[0]0):if(layer

repeat_count[layer]=repeat_count[layer]+1layer=layer+1else:#否则,层计数器归零,向上一层v_temp[layer]=None

repeat_count[layer]=0

layer=layer-1else:#第 n-1 层:计数器每移动一个位置,都是一种组合pos=repeat_count[layer]if(pos

layer=layer-1returnresultif__name__=="__main__":printpermutation(10),'\n'#全排列数printpermutation(10,2),'\n'#5 选 2 排列数printpermutation(10,duplicate=True),'\n'#允许重复的全排列li=['a','b','c']print'全排列:',permutation(li),'\n'print'选2 :',permutation(li,2),'\n'print'允许重复 :',permutation(li,duplicate=True),'\n'raw_input()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值