剑指Offer(6)——字符串的全排列

题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

思路:
这里写图片描述
大致思路就是对于字符串的每一个位置都让还没有确定位置的字符坐一遍,比如第一个位置,让原字符串里所有的字符都来坐一遍,然后第二位的位置让除第一位的字符之外所有的字符坐一遍,依次下去就可以织成上图那样的网得到字符串的全排列。
需要注意的是,字符串有可能存在重复的字符,所以最后要进行去重处理。

# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self,ss):
        if not ss:
            return []
        res = []
        self.helper(ss,res,'')
        return sorted(list(set(res)))     #利用set的不重复性进行去重   


    def helper(self,ss,res,sub_ss):     #使用函数的递归来得到全排列树
        if not ss:
            res.append(sub_ss)
        else:
            for i in range(len(ss)):
                self.helper(ss[:i]+ss[i+1:],res,sub_ss+ss[i])

题目扩展:求字符串中所有字符的所有组合
如:‘abc’,所有组合:a,b,c,ab,ac,bc,abc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章