描述
输入一个字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
讨论组大神的简洁有效代码:
# -*- coding:utf-8 -*-
class Solution:
def Permutation(self, ss):
if len(ss) <= 1:
return ss
res = set()
# 遍历字符串,固定第一个元素,第一个元素可以取a,b,c...,然后递归求解
for i in range(len(ss)):
for j in self.Permutation(ss[:i] + ss[i+1:]): # 依次固定了元素,其他的全排列(递归求解)
res.add(ss[i] + j) # 集合添加元素的方法add(),集合添加去重(若存在重复字符,排列后会存在相同,如baa,baa)
return sorted(res) # sorted()能对可迭代对象进行排序,结果返回一个新的list
set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
这个函数可以删掉重复数据!
来源于https://www.runoob.com/python/python-func-set.html。
比如我们输入的字符组ss=‘aabbc’,那么res=set(ss)(即输出为set(['a','b','c'])),len(ss)=5,range从0开始。 其中关于ss[:i]以及ss[i+1:],前者是指前i位的元素,例如ss[:2]为aa。后者是指第i位以后的元素,例如ss[3:]为bc。
Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表
用法是:range(stop)或者是range(start,stop[, step])
默认从0开始,但是不包括stop。
add() 方法向集合添加元素。如果该元素已存在,则 add() 方法就不会添加元素。
用法是:set.add(element)
sorted() 函数对所有可迭代的对象进行排序操作。
用法是:sorted(iterable, cmp=None, key=None, reverse=False)
sort 与 sorted 区别:
①sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
②list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。