字符串数组拼接出一个最小的数字
记得在之前的一个面试中遇到了这个算法题, 但是当时没怎么想好如何判断两个字符串之间的大小,比如 23
和 223
之间,其组合起来绝对是 23
大于 223
,所以 223
是需要放在前面的。
思路
其实可以将两个字符串相加,例如 22323 < 23223 ,所以 223
是需要放在 23
前面的,下面就是代码.
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| private void getNum(String[] str){ sortString(str,0,str.length-1); }
private void sortString(String[] strArray ,int start ,int end){ if(end > strArray.length -1 || end <0){ return; } if(start <0 || start > strArray.length -1){ return; } if(start == end ){ return; } int mid =(start + end) / 2; while (start < end && start <mid && end >mid){ String s1 =strArray[start] +strArray[mid]; String s2 =strArray[mid] +strArray[start]; String s3 =strArray[mid] +strArray[end]; String s4 =strArray[end] +strArray[mid]; if(Integer.parseInt(s1) < Integer.parseInt(s2)){ start++; } if(Integer.parseInt(s3) < Integer.parseInt(s4)){ end--; } } String temp =strArray[start]; strArray[start] = strArray[end]; strArray[end] =temp; sortString(strArray,start,mid ); sortString(strArray,mid-1,end ); }
public static void main(String[] args) { String[] s =new String[]{"32","321","3"}; new GetSmallSum().getNum(s); StringBuffer stringBuffer =new StringBuffer(); for(String s1 :s){ stringBuffer.append(s1); } System.out.println(Integer.parseInt(stringBuffer.toString())); }
|