# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self, ss):
        # write code here
        if len(ss) <= 1:
            return [ss]

        results = []
        unique_ss = list(set([c for c in ss]))
        unique_ss.sort()
        for c in unique_ss:
            children_results = self.Permutation(ss.replace(c, "", 1))
            results.extend([c+r for r in children_results])
        return results

纯递归的方法,代码简单
ss的排列组合,等价于ss中不重复的字母拼接除去该字母的子集的排列组合
例如对"aab"做递归: func("aab") = ['a'+func("ab"), 'b'+func("aa")] (因为这里有重复的a,独立的字母只有a和b两种)
这里直接使用python的集合进行去重。在测试的时候发现系统有检测输出字典顺序,加入了sort进行字符排序