题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
牛客网:链接
对字符串操作,最后转成list!
化复杂为简单,如何找到解这道题的通式呢?和青蛙跳台阶的思路一样,无论给定的字符串长度多少,其排列出来的组合样式均可以分解为“第一个字符+剩下的字符”的样式。可以通过遍历分别赋予第一位上不同的字符,那“剩下的字符”又可以如上分解。
# -*- coding:utf-8 -*-
class Solution:
def Permutation(self, ss):
# write code here
if not ss:
return []
if len(ss) == 1:
return [ss]
charList = list(ss)
charList.sort()
pStr = []
for i in range(len(charList)):
''' 从第一位开始 如果和前一个字符相同 不做任何操作 直接跳过'''
if i > 0 and charList[i] == charList[i-1]:
continue
temp = self.Permutation(''.join(charList[:i])+''.join(charList[i+1:]))
for j in temp:
pStr.append(charList[i]+j)
return pStr
如果输入‘abc’,返回值是['abc', 'acb', 'bac', 'bca', 'cab', 'cba']。
字符串的组合
# -*- coding:utf-8 -*-
class Solution:
def group(self, ss):
if not ss:
return []
if len(ss) == 1:
return [ss]
charList = list(ss)
charList.sort()
pStr = []
for i in range(len(charList)):
pStr.append(charList[i])
if i > 0 and charList[i] == charList[i-1]:
continue
temp = self.group(''.join(charList[i+1:]))
for j in temp:
pStr.append(charList[i]+j)
return pStr