基础算法——全排列问题

COUNT = 0

def 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]
perm(N, 0, len(N))
print(COUNT)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值