我看大家都是把字符串转换成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],直到输出所有结果!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐