我的练习册day-01

题目描述:

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印所拼接出的所有数字中最小的一个。例如:输入数组{3,32,321},则打印出这三个数字能排成的最小数字是321323

思路:

1.首先,只考虑两个数字的情况:[3,32],可以看出 332>323,因此需要把数组改变为[32,3];

2.对于有三个数的情况:[3,32,321],我们可以进行两两比较,332>323,于是将3和32交换位置,变成[32,3,321],而3321>321,所以,将3和321交换位置,即为[32,321,3],接下来比较,323213>321323,所以将32与321进行位置交换,即[321,32,3]

def getMinNumber(list01):
    if list01 is None:   #首先判断列表是否为空
        return None
    for i in range(len(list01)):
        for j in range(i+1,len(list01)):
            if str(list01[i])+ str(list01[j]) > str(list01[j]) + str(list01[i]):   #注意类型转换
                list01[i],list01[j] = list01[j],list01[i]   #进行交换
    return"".join(str(x) for x in list01)
   #list02= "".join(list)  #报错:expected str instance, int found  应为str实例,找到int

print(getMinNumber([3,32,321]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值