Python 生成全排列的两种方式

第一种方式:

利用python的itertools模块的permutations()方法

from itertools import permutations
try:
    while 1:
        s=sorted(raw_input())
        l=permutations(s)
        for x in l:
            print ''.join(x)
except:
    pass


第二种方式

利用递归方式:

方法:生成一个标志为数组,记录该元素是否已经被使用

注意的地方:标志数组使用完之后,要注意恢复,也就是代码中 

# -*- coding:utf-8 -*-
import  sys
import copy

def getAllP(tp, vis, lens,cur,res,tmp):
    if cur == lens:
        res.append(copy.deepcopy(tmp))
        return
    for i in range(lens):
        if vis[i] ==0:
            vis[i]=1
            tmp.append(tp[i])
            cur +=1
            getAllP(tp,vis,lens,cur,res,tmp)
            cur -=1
            vis[i] =0
            tmp.pop()
    return res


if __name__ == '__main__':
    while True:
        tp = sys.stdin.readline().strip()
        if not tp:
            break
        tp = list(tp)
        tp.sort()
        lens = len(tp)
        vis = [0]*lens
        res= []
        res = getAllP(tp,vis,lens,0,res,[])
        for i in res:
            print ''.join(i)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值