题目
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
方法
方法:排序 —— 修改排序规则
参考:https://blog.csdn.net/dawn_after_dark/article/details/81256350
时间复杂度:排序的时间复杂度
思路
假如数组只有2个元素a和b。可以组合成ab和ba,存在下面的排序规则的:
如果ab < ba,那么取ab
如果ab > ba,那么取ba
如果ab = ba,取ab或ba都行
那么如果数组不止2个元素,但是针对数组中任意2个元素,在组合和的位置中,也是可以套用上面的排序规则的。比如有3个元素a、b和c。那么如果c一直在中间,可以组成acb,和acb
如果acb < bca,那么取acb
如果acb > bca,那么取bca
如果acb = bca,取acb或bca都行
按照上述例子,数字中任意2个元素在组合后的顺序是符合一开始的排序规则的,那么就可以通过排序数组的元素,替换掉比较规则为上述的排序规则,最后将排序后的数组各元素直接拼接起来,即可得到答案
代码
1 | function PrintMinNumber (numbers) { |