JZ45 把数组排成最小的数
JZ45 把数组排成最小的数
题目描述
输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。
1.输出结果可能非常大,所以你需要返回一个字符串而不是整数
2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
数据范围:$0<=len(numbers)<=100$
示例1
1 | 输入:[11,3] |
示例2
1 | 输入:[] |
示例3
1 | 输入:[3,32,321] |
题解
既然说把数组“排”成一个最小的数,那么排序肯定是少不了了的,但是如何进行这个排序是个问题,也就是说两个数字之间进行比较,让谁排在前面会让数字更小?
不需要考虑数位的问题,三位数和两位数相比较只比较两位即可,因为拼接之后的数位是一定的。
由此可以考虑两个数字进行比较,只需要逐位比较,直到找到某个数字的某一位比另一位大,则让大的排在后面,小的排在前面,如果所有的都相同,直到短数结束,将长的排在后面即可。
由此有了排序方式,再套上冒泡排序的壳,应该就可以AC了。
后来发现我简直是神经
正确的排序方式就是直接比较相邻两个字符串拼接之后的数字即可。
代码
1 | # |