Rosalind第19题——ros_bio19_PERM

如果第一次阅读,请查看写在前面

#递归果然还是不太会用!!

def permutation(li):
    len_list = len(li)
    if len_list == 1:
        return li

    result = []
    for i in range(len_list):
        res_list = li[:i] + li[i + 1:]
        s = li[i]
        per_result = permutation(res_list)
        if len(per_result) == 1:
            result.append([s] + per_result)
        else:
            result += [[s] + j for j in per_result]
    return result


n = int(input('请输入n:'))
a = []
while n > 0:
    a.append(n)
    n -= 1
per = permutation(a[::-1])
print(len(per))
s = ''
for i in per:
    n = [str(x) for x in i]
    s = ' '.join(n)
    print(s)


'''
#python自带的模块
import itertools


def permutation(li):
    return list(itertools.permutations(li))


n = int(input('请输入n:'))
a = []
while n > 0:
    a.append(n)
    n -= 1

per = permutation(a[::-1])
print(per)
'''


'''
#另一种做法
def perm(seq, begin, end):
#进行排列的函数
    global num
    if begin == end:
        print(" ".join(seq))
        num += 1
    else:
        for index in range(begin, end):
            seq[index], seq[begin] = seq[begin], seq[index]
            perm(seq, begin + 1, end)
            seq[index], seq[begin] = seq[begin], seq[index]


num = 0
seq = ['1', '2', '3']
perm(seq, 0, len(seq))
print(num)
#作者:未琢 https://www.bilibili.com/read/cv2077119 出处:bilibili
'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值