剑指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]
推荐阅读
-
剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。
-
剑指offer31:整数中1出现的次数(从1到n整数中1出现的次数)
-
剑指offer28:找出数组中超过一半的数字。
-
剑指offer27:按字典序打印出该字符串中字符的所有排列
-
C#版剑指Offer-001二维数组中的查找
-
剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)
-
剑指offer JZ31 整数中1出现的次数 Python 解
-
剑指offer JZ54 字符流中第一个不重复的字符 Python 多解
-
[算法练习-剑指offer]题18.二叉树的镜像(Java)
-
剑指Offer积累-JZ1-二维数组中的查找