把数组中所有的正整数组合排成最小的数

给定一个正整数数组,需要找到一种排序方法使拼接后的数字最小。直接全排列不是高效方法,需要设定排序规则:若mn<nm,m排在n前。通过将数字转为字符串比较大小,避免大数溢出问题。
摘要由CSDN通过智能技术生成

1、题目

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


2、思路一、

最直接的做法就是先求出这个数组中所有数字的全排列,然后把每个排列拼起来,最后求出拼起来的数字的最大值。

但是这不是一个高效的算法,因为当数组中有n个数字时,总共有n!个排列,如果n很大的话,全排列将会是一个很大的数。


3、思路二

可以换种思路,我们可以设法找到一个排序规则,数组根据这个规则排序之后就能排成一个最小的数字。要确定排序规则,就要比较两个数字,也就是给出两个数字m

和n,我们需要确定一个规则判断m和n那个应该排在前面,而不是仅仅比较这两个数字的值哪个更大。

根题目要求,两个数字m和n能拼接成数字mn和nm。如果mn<nm,那么我们应该打印出mn,也就是m应该排在n的前面,我们定义此时m小于n;反之,如果mn>nm,我

们定义n小于m,如果mn=nm,m等于n。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值