题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
个人理解和感觉,题目不是很难,比较简单,但是有需要注意的地方,1,数字的拼接不能用int或者long,数组很大会溢出。2,排序规则,要重新定义,根据,a和b的前后顺序不一样,可以得到两个数,ab和ba比较ab和ba,如果ab>ba那么a就大于b,反之,b小于a。有了新的排序规则,接下来先择一个排序算法就可以了。下面用的是冒泡,比较好理解。也可以用快排等一些时间复杂度比较低的排序算法。
public String PrintMinNumber(int [] numbers) { String[] ass= new String[numbers.length]; for (int i = 0; i < numbers.length; i++) { ass[i] = String.valueOf(numbers[i]); } String res = ""; for (int i = 0; i < ass.length; i++) { for (int j = i+1; j < ass.length; j++) { String str1 = ass[i]+ass[j]; String str2 = ass[j]+ass[i]; if (compare(str1, str2)==1) { String a = ass[i]; ass[i] = ass[j]; ass[j] = a; } } res+=ass[i]; } // System.out.println(res) return res; } static int compare(String str1,String str2){ for (int i = 0; i < str1.length(); i++) { if (str1.charAt(i)>str2.charAt(i)) { return 1; }else if (str1.charAt(i)<str2.charAt(i)) { return -1; } } return 0; }