若干整数组成的最小值

来源:互联网 发布:linux xargs file 编辑:程序博客网 时间:2024/05/16 15:42

一组正整数,每个都要用上,把它们首尾拼接,可以组成一个新的整数,问最小的整数怎么拼接。
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)

代码可以用递归实现。

0 0