题目描述:
设有n个正整数,将它们联接成一排,组成一个最小的多位整数。
程序输入:n个数
程序输出:联接成的多位数
例如:
n=2时,2个整数32,321连接成的最小整数为:32132,
n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355
[题目要求]
1. 给出伪代码即可,请给出对应的文字说明,并使用上面给出的例子试验你的算法。
2. 给出算法的时间空间复杂度。
3. 证明你的算法。(非常重要)
分析:(问题归结为排序,但大小比较非一般的比较)
举例说明正常的字符串比较缺陷!如:A=’321’,B=’32’,按照标准的字符串比较规则因为A>B,所以A+B > B+A ,而实际上’32132’ < ’32321’。
所以,自定义一种字符串的比较规则:即如果A+B>B+A,则我们认为A>B。且可以证明:如果A+B>=B+A,B+C>=C+B,则一定有:A+C>=C+A。
这样一来,程序就很简单了。分3步,先把n个数字转换成字符串存储;再按照自定义的规则把n个字符串排序;最后按照从小到大的顺序输出这些字符串(如果从大到小则是求最大的多位整数)。