欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指offer 28 字符串的排列

程序员文章站 2022-07-10 12:19:20
...

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

思路

用递归,把字符串分为两部分,第一部分为1个字符串,第二部分为剩下的字符串,把第一部分和第二部分依次对换,对第二部分重复。

# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self, ss):
        # write code here
        ss = list(ss)
        res = []
        self.func(res, ss, 0)
        return sorted(list(set(res)))
    def func(self, res, ss, startindex):
        if startindex == len(ss) - 1:
            res.append(''.join(ss))
        else:
            for i in range(startindex, len(ss)):
                ss[i], ss[startindex] = ss[startindex], ss[i]
                self.func(res, ss, startindex + 1)
                ss[i], ss[startindex] = ss[startindex], ss[i]