非重复字符串的全排列——python实现

比如 s = ‘abc’,那字符串 s 的全排列结果为“abc”,“abc”,“bac”,“bca”,“cba”,“cab”。
(1)代码

def string_permutation(s):
    # 迭代终止条件
    if len(s) <= 1:
        return [s]
    else:
        temp_list = []
        for i in range(len(s)):  # 遍历字符串 s 中的每个字符
            for j in string_permutation(s[0:i] + s[i+1:]): # 把除了s[i]字符以外的字符组成字符串然后让它迭代
                temp_list.append(s[i]+j)
        return temp_list        

(2)分析
如 s = ‘abc’
过程1:
s = ‘abc’
s的长度为3
i 可以取 0,1,2
当 i = 0时,string_permutation([‘bc’])迭代,进入过程2(去看过程2)。
处理完过程2后返回到这里:
此时 j 只能取 ‘bc’,‘cb’,所以temp_list = [‘abc’,‘acb’]

当 i =1时,string_permutation([‘ac’])迭代,这里和 i = 0 的情况一模一样,我害怕把大家搞混就不再赘述了。

过程2:
s = ‘bc’
s的长度为2
i 可以取 0,1
当 i = 0时,string_permutation(‘c’)迭代,进入过程3(去看过程3)。
处理完进程3后返回到这里:
此时 j 只能取 ‘c’,所以temp_list = [s[0]+j] = [‘bc’]。

当i = 1时,string_permutation(‘b’)迭代,进入过程4(去看过程4)。
处理完过程4后返回到这里:
此时 j 只能取‘b’,所以temp_list = [‘bc’,‘cb’],因为是append()哈。
所以过程2最终返回的temp_list是 [‘bc’,‘cb’]。

过程3:
s = ‘c’
s的长度为 1
满足迭代终止条件,所以string_permutation(‘c’)返回 [‘c’]

过程4:
s = ‘b’
s的长度为 1
满足迭代终止条件,所以string_permutation(‘b’)返回 [‘b’]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值