算法实践:全排列(递归)

本文详细解析了字符串全排列算法的实现过程,包括递归思想的应用及代码实现。通过一个具体的示例,abc字符串的全排列,展示了如何通过递归调用获取所有可能的排列组合,并确保结果按字母序输出。文章提供了完整的Python代码示例,帮助读者理解并掌握全排列算法。
摘要由CSDN通过智能技术生成

全排列

描述

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。

输入

输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在2到8之间。

输出

输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:

已知S = s1s2…sk, T = t1t2…tk,则S < T 等价于,存在p (1 <= p <= k),使得s1= t1, s2= t2, …, sp - 1= tp - 1, sp< tp成立

样例

abc
abc
acb
bac
bca
cab
cba 

难度

中等,递归

解题思路

img

代码

status_list = []
def permutations(arr, position, end):
    if position == end:
        #print(arr)
        status_list.append(list(arr))
        #print(status_list)
    else:
        for index in range(position, end):
            arr[index], arr[position] = arr[position], arr[index]
            permutations(arr, position+1, end)
            arr[index], arr[position] = arr[position], arr[index]
def sortstring(status_list):
    for i in range(len(status_list)):
        stri = ''
        for item in status_list[i]:
            #print(item)
            stri += str(item)
            status_list[i] = stri
    status_list.sort()


s = input()
arr=[]
for i in s:
    arr.append(i)
permutations(arr, 0, len(arr))
sortstring(status_list)
#print(status_list)
for i in status_list:
    print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值