《剑指offer》字符串的排列

本题来自《剑指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]剩下的进行全排列

总结:

原文地址:https://www.cnblogs.com/missidiot/p/10783640.html