剑指Offer_编程题27:字符串的排列(全排列)

题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值