1.题目描述
传送门
2.code(java1.7版本)
import java.util.*;
public class Solution {
public String PrintMinNumber(int [] numbers) {
if(numbers==null)return "";
int len=numbers.length;
if(len==0)return "";
String[] str=new String[len];
StringBuilder sb=new StringBuilder();
for(int i=0;i<len;i++){
str[i]=String.valueOf(numbers[i]);
}
Arrays.sort(str,new Comparator<String>(){
@Override
public int compare(String s1,String s2){
String c1=s1+s2;
String c2=s2+s1;
return c1.compareTo(c2);
}
});
for(int i=0;i<len;i++){
sb.append(str[i]);
}
return sb.toString();
}
}
3.解题思路
对于这道题,其实只需要将原来数组里面的数据按照一个设定的规则从小到大排序,在将全部的数据按照字符串拼接起来即可完成最小字符串的发现。但是怎么进行数据之间两两的大小的比较?这就需要我们自己设定比较的规则,可以看出,我们是希望最后的字符串数据最小,那么我们需要以拼接好的数据作为比较的依据来比较原来数据的大小排列,则规则如下:
若ab > ba 则 a > b,
若ab < ba 则 a < b,
若ab = ba 则 a = b;
其中,a,b都为原来的数据转换为的字符串,这样设定比较规则,再用java里面的sort进行整体的排序,最后进行全部字符串的拼接即可得到最后最小的字符串。