编程练习
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:由题可知,此题的重点在于拼接数字的多种可能性,即对输入的的数组元素需做一个全排列,然后拼接成一个数字,再做比较。
整数拼接写起来很麻烦,遂很容易想到将数组元素的各个int值转为String类型,变换成字符串来处理,就变成了字符串的全排列问题,此题之前已经做过,如果通过了那道字符串的全排列问题,这道题就很简单了,只需那道题的排列函数稍加改动,就可以完成此题所需的字符串全排列。做完排列以后需要将结果集中的字符串再转为整数类型,才可调用sort函数来进行整数的排序。
注意:因为数组元素个数的不确定性,所以此题不建议用int型来盛装最后的结果集,我一开始用的int,结果后来发现拼接后的数字很有可能超过10位数字,此时int就不够用了,需要改用Long类型。此外,还需考虑输入数组为空和输入数组长度为0的特殊情况,这两者的返回值一个为null,另一个为””。
java代码如下:
1 | import java.util.ArrayList; |