劍指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

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