题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323
问题分析:题目要求所给数组排成的数最小,也就是一种特殊的排序问题。
(1)一种思路是把n个数进行排列组合,然后合并成一个数,一共有n!个数,再从这些数中选出最小的。很明显当n足够大时,时间复杂度会很大。
(2)另一种思路,对于数组中的每两个数,以不同的顺序进行合并,然后比较两种合并得到的数的大小,较小的数的排列就是我们所需要的排列顺序。比如数a和b,如果ab<ba,那么就把a排到b的前面。因此问题就变成了对数组从“小”到“大”进行排序,不过这里的大小是两数以不同先后顺序合并得到的数的大小。
代码截图:
网友评论