复杂问题简单化
把数组排成最小的数
http://www.nowcoder.com/questionTerminal/8fecd3f8ba334add803bf2a06af1b993
不想有多少排列组合,就想着当前数组中有两个数,怎么返回最小的数?
写一个compare方法比较就行
那么再往后想,三个数呢?先比较前两个,再拿前两个的结果与后面的数compare
但是大前提是数组是从小到大排列的,从小到大才能保证每一步都是当前最小
所以算法如下
首先判空,任何题都要考虑传入空值,边界值等条件
然后排序,取第一个作为结果
然后依次拿第一个与第二个比较compare求组合的最小
拿第一个与第二个求出的最小与第三个比较
...
一直到最后
代码如下:public String PrintMinNumber(int [] numbers) { if (numbers == null || numbers.length == 0) { return ""; } Arrays.sort(numbers); String result = String.valueOf(numbers[0]); for (int i=1; i<numbers.length; i++) { result = compareTwoNumbers(numbers[i] + result, result + "" + numbers[i]); } return result; } /** * 比较两个数的大小,返回较小的数 */ String compareTwoNumbers(String a, String b) { // 此处两个数长度肯定相等,因为是前后位置变换得到的两个数 for (int i=0; i<a.length(); i++) { if (a.charAt(i) != b.charAt(i)) { return a.charAt(i) < b.charAt(i) ? a : b; } } // 如果比较完之后都没有不相等的字符,就随便返回一个就行,因为两数相等 return a; }