字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
示例1
输入
“ab”
返回值
[“ab”,“ba”]
解题思路:
- 先对输入的字符串进行排序【要求按字典顺序打印】。
- 对排好序的数组:先固定其中一个元素,然后对剩下的元素进行排列。
如:"abc"
先固定"a",对"bc"进行排序。同理固定"b",对"ac"排序。【递归条件】
当数组只含有一个元素时,返回该值。【基线条件】
对"abc"
【1】➜ 固定"a",对"bc"
【1.1】➜ 固定"b",对"c"。
【1.1.1】➜ 只有一个元素"c",返回该值。
➜【1.1】 得到排序"bc",用数组存放起来。
【1.2】➜ 固定"c",对"b"。
【1.2.1】➜ 只有一个元素"b",返回该值。
➜【1.2】 得到排序"cb",用数组存放起来。运行完毕,返回数组[“bc”,“cb”]。
➜【1】 得到排序"abc",“acb”,用数组存放起来。
➜【2】固定"b",对"ac"
…
代码
class Solution:
def Permutation(self, ss):
if len(ss) < 2:
return [ss]
#先对字符串进行排序操作
def quicksort(array):
if len(array)<2:
return array
zuo = []
you = []
value = array[0]
for i in range(1,len(array)):
if array[i] < value:
zuo.append(array[i])
else:
you.append(array[i])
return quicksort(zuo) + [value] + quicksort(you)
shunxu = quicksort(ss)
#然后从左到右开始固定一个字符,对其他字符进行排列组合,再将结果合并在一起
def solution(array):
if len(array)<2:
return array[0]
save_list = []
for i in range(len(array)):
first_list = array[i]
for new_array in solution(array[:i]+array[i+1:]):
tmp = first_list + new_array
if tmp not in save_list:
save_list.append(tmp)
return save_list
return solution(shunxu)