输入一个字符串,打印出该字符串中字符的所有全排列,并按照字典排序的顺序,输入的字符串中可能有重复的字符。
从字符串的第一个字符开始,依次固定其一个字符,利用递归排列剩下的字符串。即将字符串看成两部分,一部分是固定的字符,另一部分是剩下的字符的全排列。对于python代码,用一个set集合存储,因为排序set集合的时候可以去除掉重复的部分。
python代码:
# -*- coding:utf-8 -*-
class Solution:
def Permutation(self, ss):
if len(ss) <= 1:
return ss
res = set()
for i in range(len(ss)):
for j in self.Permutation(ss[:i]+ss[i+1:]):
res.add(ss[i]+j)
return sorted(res)
将字符串的第一个元素看成第一部分,将后面的元素看成第二部分,将第一个元素与后面的元素交换,然后每次交换后再对后面的元素执行递归操作进行全排列。
首先确定递归的终止条件,即遍历到字符串最后一个字符为止,本题为begin == str.size()-1。
当到达此条件时,判断一下看看最终结果的vector里有没有重复的字符串,如果没有则添加到vector中,随后如果遍历条件没有达到,则使用递归的思想,先固定住字符串中的第一个元素,随后依次遍历后面的元素,与第一个元素进行交换,然后全排列后面的元素,最后再进行依次复位。
C