抛出问题
求任意一个字符串的全排列组合,例如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
我相信努力的人运气不会差,未来会给我一双梦想的翅膀