python 火车进站-即数的全排列问题

博客探讨了如何使用Python解决火车进站问题,实际上是一个数的全排列问题。作者提到了Python中可能不支持连续空格输入,并且在实现过程中遇到了关于yield的理解难题。递归方法被用来实现全排列,类似于后根遍历的调用方式。

火车进站-即数的全排列问题

给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。
输入描述:
有多组测试用例,每一组第一行输入一个正整数N(0<N<10),第二行包括N个正整数,范围为1到9。
输出描述:
输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见      sample。
输入示例:
  3
  1 2 3
输出示例:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

代码

#! usr/bin/env python
# -*- coding: utf-8 -*-
list1=[]
list2=[]
list3=[]
print "Enter the number of items"
i=input()
for j in range(i):
    k=input()
    if k<0 or k>10:
        print "erro"
        break
    else:
        list1.append(k)

def pl(s):
    if len(s)<1:
        #print s,len(s)
        yield s 

    else:
        for x in pl(s[1:]): #分片
            for y in range(len(s)):
                yield x[:y]+s[0:1]+x[y:]

list2=pl(list1)

list3=sorted(list2,reverse=False)#按字典序排序
#循环输出
for m in list3:
    print m

结果

*说明:python 好像不支持空格式连续输入
它的循环输出也最好是一个列表或远组
yield的资料看的不是很懂,望大牛可以解释
这里递归好像是以一种后根遍历的调用*

这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值