- 论坛徽章:
- 0
|
把一个字符串中所有字符的所有可能的组合打印出来(字符串中没有重复的字符)
不考虑字符顺序('123'和'312'是一样的)
我勉强写了一个
超级慢
大伙有好的算法吗
- #!/usr/bin/env python
- def split_str(mystr):
- s_len=len(mystr)
- if s_len <= 0:
- return []
- l_ret=[]
- s_list=list(mystr)
- while s_len > 0:
- s_len=s_len-1
- pp=s_list[:s_len]+s_list[s_len+1:]
- if len(pp):
- l_ret.append(''.join(pp))
- return l_ret
- def split_list(mylist):
- l_len=len(mylist)
- if l_len <= 0:
- return []
- while l_len > 0:
- l_len=l_len-1
- zz=split_str(mylist[l_len])
- zz_len=len(zz)
- while zz_len > 0:
- zz_len=zz_len-1
- yy=split_list([zz[zz_len]])
- if len(yy):
- zz=zz+yy
- if len(zz):
- for i in zz:
- if i not in mylist:
- mylist.append(i)
- return mylist
- if __name__ == '__main__':
- print split_list(['12345'])
复制代码
- sam-linux:/tmp# ./bb.py
- ['12345', '1234', '1235', '1245', '1345', '2345', '234', '235', '245', '345', '34', '35', '45', '4', '5', '3', '24', '25', '2', '23', '134', '135', '145', '14', '15', '1', '13', '124', '125', '12', '123']
复制代码
[ 本帖最后由 bleem1998 于 2006-5-18 11:19 编辑 ] |
|