算法题/把数组排成最小的数

本文介绍了一种通过全排列找出由正整数数组组成最小数字的方法。使用Python实现,首先定义了一个生成数组所有排列的函数,然后定义了获取这些排列中最小数字的函数。举例说明了如何对数组{32,321}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python2.7

输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法

最简单想法:将数组全排列,找出最小的值

#coding:utf-8
def arrangement(a):
        if len(a) == 0:
                return [[]]
        else:
                result = []
                for i in a:
                        temp = a[:]
                        temp.remove(i)
                        for j in arrangement(temp):
                                result.append([i]+j)
                return result

def get_min_number(a):
        s = ''.join(a)
        s_arr = list(s)
        result = arrangement(s_arr)
        k = int(''.join(result[0]))
        for i in result[1:]:
                if int(''.join(i))< k:
                        k = int(''.join(i))
        return k
print(get_min_number(['321','32','3']))

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值