JZ27 字符串的排列

描述

输入一个字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。例如输入字符串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,而不是在原来的基础上进行的操作。

来源于https://www.runoob.com/python/python-func-sorted.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值