一组正整数,每个都要用上,把它们首尾拼接,可以组成一个新的整数,问最小的整数怎么拼接。
12和23:
1223 < 2312
思路可以是这样:
实际转化为字符串问题,每个整数可以表示成字符数组,将它们纵向排列成一个矩阵,空的位置填-1.
32, 546, 3251,274, 54, 541, 1234, 336, 58
先排序第一行,再排序第二行,依次往下。每次分别按横轴上字符的asc码从小到大排序。
比如,第一轮排序可以将数字分类,
(1234), (274), (32,325,336),(546,54,541,58)
显然,首字符小的应该放前面,大的放后面。按整列交换。
然后在不同的分类中,继续按第二个字符排序,继续分类。
(32,325),(336),(546,54,541),(58)
依次往下,直到分类中只有一个数字为止。
最后按列扫描矩阵,输出拼接字符串,即最小整数。
这题的考点在于,如果遇到某个数字过早结束,怎样比较。即
(32[-1],325),(546,54[-1],541)
这个时候要比较该字符与首字符的大小。即
5 > 3, 所以 (32, 325)
6 > 5 and 1 < 5, 所以 (541, 54, 546)
代码可以用递归实现。