1、题目
输入一个正整数的数组,把数组里所有数字拼接起来排成一个数,打印能拼接处的所有数字中的最小一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.
2、思路一、
最直接的做法就是先求出这个数组中所有数字的全排列,然后把每个排列拼起来,最后求出拼起来的数字的最大值。
但是这不是一个高效的算法,因为当数组中有n个数字时,总共有n!个排列,如果n很大的话,全排列将会是一个很大的数。
3、思路二
可以换种思路,我们可以设法找到一个排序规则,数组根据这个规则排序之后就能排成一个最小的数字。要确定排序规则,就要比较两个数字,也就是给出两个数字m
和n,我们需要确定一个规则判断m和n那个应该排在前面,而不是仅仅比较这两个数字的值哪个更大。
根题目要求,两个数字m和n能拼接成数字mn和nm。如果mn<nm,那么我们应该打印出mn,也就是m应该排在n的前面,我们定义此时m小于n;反之,如果mn>nm,我
们定义n小于m,如果mn=nm,m等于n。