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