Python实现字符串的全排列

本文介绍了一种不转换字符串为list的全排列算法,通过递归实现在原字符串上进行操作,避免了额外的数据结构转换,提高了算法的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我看大家都是把字符串转换成list来解决,然后两个元素换来换去,那我胖虎今天偏不要转换字符串,就直接在输入的字符串上开搞,不转换list。下面是完整代码:

```python
in_put='abcd'
temp=''
count=0
def order(s,position):
    global count
    global temp
    if len(s)==0:
        print('out :',temp)
        count+=1
    else:
        for i in s:
            temp+=i
            order(s[s.index(i)+1:]+s[:s.index(i)],position+1)
            temp = temp[:position]
order(in_put,0)
print(count)
out : abcd
out : abdc
out : acdb
out : acbd
out : adbc
out : adcb
out : bcda
out : bcad
out : bdac
out : bdca
out : bacd
out : badc
out : cdab
out : cdba
out : cabd
out : cadb
out : cbda
out : cbad
out : dabc
out : dacb
out : dbca
out : dbac
out : dcab
out : dcba
24

本方法是用递归实现,使用全局变量count来记录全排列一共有
多少种。全局变量temp来记录排列中的状态。每次确定一个元素position变量记录当前排列元素的位置,然后在剩余元素s[s.index(i)+1:]+s[: s.index(i)]中继续进行全排列,直到剩余
元素个数为零,输出temp;然后回退temp// temp = temp[:position],直到输出所有结果!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值