字符串的排列

题目描述:

输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串“abc”,则打印出由a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。

解题思路:

我们解这题时可以将字符串划分为两部分:首字符和后面的所有字符。

首先求所有可能出现在第一个位置的字符,即把首字符和后面的字符交换。 
下图是字符串abc所有字符出现在第一个位置的情形: 


然后对后面部分的字符串进行第一步操作: 


很容易想到使用递归去解决这个问题。

代码:

# -*- coding:utf-8 -*-

def Permutation(ss):
    if len(ss) <=0:
        return []
    res = list()
    perm(ss,res,'')
    uniq = list(set(res))
    return sorted(uniq)
def perm(ss,res,path):
    if ss=='':
        res.append(path)
    else:
        for i in range(len(ss)):
            perm(ss[:i]+ss[i+1:],res,path+ss[i])

if __name__ == '__main__':
    print(Permutation('abc'))

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值