字符串数组组成最小的数字

字符串数组拼接出一个最小的数字

记得在之前的一个面试中遇到了这个算法题, 但是当时没怎么想好如何判断两个字符串之间的大小,比如 23223 之间,其组合起来绝对是 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()));
}
作者

Somersames

发布于

2018-08-25

更新于

2021-12-05

许可协议

评论