首页 > 试题广场 >

全排列

[编程题]全排列
  • 热度指数:23576 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。

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


输出描述:
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得
s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。

每组样例输出结束后要再输出一个回车。
示例1

输入

abc

输出

abc
acb
bac
bca
cab
cba
def dfs(p):
    if p==lenth:
        res.append(''.join(temp))
        return 
    else:
        for i in range(lenth):
            if visit[i]:
                temp[p]=arr[i]
                visit[i]=False
                dfs(p+1)
                visit[i]=True
while True:
    try:
        arr=input().strip()
        lenth=len(arr)
        temp=['']*lenth
        visit=[True]*lenth
        res=[]
        dfs(0)
        res=sorted(res)
        for i in res:
            print(i)
        print()
    except:
        break
发表于 2019-09-05 10:53:47 回复(0)
#通过递归交换数组,得到一个无重复列表的全排列
#需要注意几点,输入字母未排序,输出最后还要加一个空格(应该是利于某些算法)

#这函数输入如果是有序的可以得到按顺序的全排列
def allPermute(array):
    result = []
    tempArray = list(array)
    def exchange(num):
        nonlocal tempArray
        nonlocal result
        if num == len(tempArray)-1:
             result.append(list(tempArray))
        else:
            for j in range(num,len(tempArray)):
                tempArray[num],tempArray[j] = tempArray[j],tempArray[num]
                exchange(num+1)
                tempArray[num], tempArray[j] = tempArray[j], tempArray[num]
    exchange(0)
    return result
try:
    while True:
        string = list(input())
        temp = allPermute(string)
        temp.sort()
        for i in temp:
            print("".join(i))
        print()
except Exception:
    pass

编辑于 2018-10-08 18:25:16 回复(0)
import itertools
while True:
    try:
        results=[]
        str1=str(input())
        for i in itertools.permutations(str1,len(str1)):
            results.append(''.join(i))
        results.sort()
        for each in results:
            print(each)
        print()
    except:
        break
发表于 2018-05-11 15:38:19 回复(0)

谁能解释一下,为什么这种解法可以通过:

from itertools import permutations
while True:
    try:
        a = list(permutations(sorted(input())))
        b = len(a)
        for i in range(b - 1):
            print(''.join(a[i]))
        print(''.join(a[- 1]) + '\n')



    except:break

而这种却通不过?

from itertools import permutations
while True:
    try:

        for i in permutations(input()):
            print("".join(i))
        print("\n")


    except:break

真是****一样的判定系统。

发表于 2018-03-27 18:26:59 回复(0)
#Python内置全排列函数;抄别人的
from itertools import permutations
while 1:
    try:
        s=list(permutations(sorted(input())))
        for i in range(len(s)-1):
            print(''.join(s[i]))
        print(''.join(s[-1])+'\n')
    except:
        break

编辑于 2017-09-04 17:22:34 回复(0)
from itertools import permutations
try:
    while 1:
        a = list(permutations(sorted(raw_input())))
        b = len(a)
        for i in xrange(b - 1):
            print ''.join(a[i])
        print ''.join(a[- 1]) + '\n'
except:
    pass

编辑于 2016-12-25 10:21:37 回复(0)