本来是做了牛客网iHandy的面试题发现的这道题,思考了很多情况最后还是倒在了最后的20%case上,结果发现评论说这题跟leetcode179差不多,就去做了一下LeetCode的这道题,不过这两个地方的测试用例有点不一样,要考虑的点也不一样。
这道题的重点我觉得是自定义Comparator的编写,定义排序规则才是重点。
刚开始我考虑的是就是就比较两个字符串的首数字,决定谁更加“重要”,如果首数字是相同的话就比较字符串的长度,越长的越重要。后来发现有个case是“9”和“12”这种类型,肯定是“9”更重要,所以这样比较器就是有问题的。想了很久去看了下LeetCode上的题解,发现居然是把两个“字符串”拼接在一起,就是比较a+b和b+a哪一个更大,从而决定哪一个更加重要,其实很简单的,但是就是想不出来。同时这道题要注意“0”这个特殊值的处理
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
// System.out.println("sumNum:"+num);
List<String> strings = new ArrayList<>();
String result = "";
for(int i=0;i<num;i++) {
int now = scanner.nextInt();
String nowString = now + "";
// System.out.println("nowString:"+nowString);
strings.add(nowString);
}
Collections.sort(strings, new Comparator<String>() {
//自定义比较器
@Override
public int compare(String o1, String o2) {
String one = o1 + o2;
String two = o2 + o1;
return two.compareTo(one);
}
});
// System.out.println(strings);
int flag=0;
// 处理零值
for (String s : strings) {
if(flag==0&&!s.equals("0")){
flag=1;
}else if (flag==0&&s.equals("0")){
continue;
}
result+=s;
}
if(result.equals("")){
result="0";
}
System.out.println(result);
}