题目
输入一个正整数数组,将他们连接起来排成一个数,输出所有排出的数字中最小的一个。例如:输入数组[32,321],输出所能排出的最小数为:32132.请给出该问题的算法。
分析
对于元素位置排列的问题,如a,b,我们希望找到一种排列规则,来确定我们所要得到的是a,b还是b,a. 题目要求得到所能排出的最小的数,那如a<b,则从常识来看ab<ba。这个比较规则到底正不正确呢?在剑指offer一书中有很好的证明
http://zhedahht.blog.163.com/blog/static/25411174200952174133707/
一个有效的比较规则需要三个条件:自反性、对称性、传递性。证明过程如下
1. 自反性。即a=a.
显然如aa=aa,则a=a
2. 对称性。即如果a>b,则b<a.
如果a<b,由规则ab<ba,显然ba>ab,即b>a.
3. 传递性。即如果a<b,b<c,则a<c
假设有条件a<b,b<c,则根据规则ab<ba,bc<cb. 假设a,b,c在高位时的10幂数分别为m,n,l
则a*10^m+b<b*10^n+a —》a*(10^m-1)<b*(10^n-1);
b*10^n+c&