本题来自《剑指offer》 字符串的排列
题目:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路:
采用分治的思想,将大的字符串进行分割成小的字符集运算。
每次将其中的一个字符抽出,剩下的全排列,最后用set去重并且排序即可。
Python Code:
# -*- coding:utf-8 -*- class Solution: def Permutation(self, ss): # write code here res = [] #存放结果值 if ss: #输入参数不为空前提 self.Perm(ss,res,'') #刚开始为'' res = list(set(res)) #思路是将全部的排列组合拼接起来,利用set去重 return sorted(res) #对结果值进行排序 def Perm(self,ss,res,path): # if ss == '': #如果ss全部被分割完毕,则将path保存 res.append(path) else: for i in range(len(ss)): #对ss进行分割 self.Perm(ss[:i]+ss[i+1:],res,path+ss[i])#去除ss[i]剩下的进行全排列