抛出问题

  求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321。

解决方案

  

#字符串任意两个位置字符交换
def str_replace(str, x, y):
if x == y:
return str
x_val = str[x:x+1]
y_val = str[y:y+1]
if x < y:
str = str[0:x] + y_val + str[x+1:y] + x_val + str[y+1:len(str)]
else:
str = str[0:y] + x_val + str[y+1:x] + y_val + str[x+1:len(str)]
return str
#递归求结果
def str_sort(str,x): if x == len(str): #当x为字符串的最大长度时返回当前字符交换的结果
global str_list
str_list.append(str)
return
for i in range(x,len(str)):
if str[i] not in str[x:i]:
str = str_replace(str,i,x) #递归遍历第i个字符,
str_sort(str,x+1)
str = str_replace(str,x,i) #恢复字符串原来的顺序,便于下次遍历
else:
return
s = 'abcc'
global str_list
str_list = []
str_sort(s,0) print(len(str_list), str_list)

  相较于有重复的方法,只是多了一步,也就是在遍历第i个元素前,做个判断,就是当前需要交换的字符是否是已经‘打头’,如果有了就忽略,继续执行

  可能我解释的理解的也不是很到位,欢迎加Q交流 1156553820

最新文章

  1. Java进击C#——语法之ADO.NET
  2. 【Java学习系列】第1课--Java环境搭建和demo运行
  3. 地产cio揭秘:帆软大商业智能解决方案如何助力地产行业信息化
  4. Java Hour 59 JVM Heap
  5. php 远程下载木马
  6. clock
  7. Codeforces Round #365 (Div. 2) Mishka and trip
  8. 关闭Linux里边的selinux
  9. Webx学习(一)
  10. Nginx与Tomcat、Client之间请求的长连接配置不一致问题解决[转]
  11. linux gcc 编译时头文件和库文件搜索路径
  12. Spark 中的join方式(pySpark)
  13. Frequent values
  14. c - 冒泡/选择排序.
  15. 有关webapplicationcontext的初始化
  16. 利用node 剥取其他网站的文档数据结构 ---
  17. Java版本翻转字符串
  18. 使用open live writer客户端写博客zz
  19. C#学习笔记(36)——事件传值(非常牛逼!)
  20. Python3解《剑指》问题:“遇到奇数移至最前,遇到偶数移至最后”

热门文章

  1. jQuery开发API参考
  2. Android开发 ---ContentProvider数据提供者,Activity和Service就是上下文对象,短信监听器,内容观察者
  3. bootstrap--------bootstrap table
  4. JAVA数据库操作回滚小结
  5. leetcode题解 5. Longest Palindromic Substring
  6. L2-023. 图着色问题*
  7. 让MySQL数据库跑的更快的7个优化建议!
  8. latex之插入向量、图片、编号
  9. python学习之路07
  10. phpStudy2018 在win7下切换php7不成功解决办法