给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
1.写了一晚上的排序函数,8 和 883没通过,改了之后提交12和121没通过,后来都通过了,就剩下一个测试用例,mad,然后看了一眼评论,原来比较一下s1+s2和s2+s1就可以了,仙女落泪
String.compareTo()//字符串比较
String.valueOf(int[])//int转string
class Solution {
public String largestNumber(int[] nums) {
ArrayList<String> array = new ArrayList<>();
for(int i = 0; i < nums.length; i++){
String str = String.valueOf(nums[i]);
// char[] ch = str.toCharArray(); //一开始理解错了题
// for(char c : ch){
// array.add(c);
// }
array.add(str);
}
// Collections.sort(array, new Comparator<String>() { //狂写排序还是没通过,哈,哈,哈
// @Override
// public int compare(String o1, String o2) {
// int len1 = o1.length();
// int len2 = o2.length();
// if(len1 < len2){
// // for(int i = 0; i < len1; i++){
// // if(o1.charAt(i) != o2.charAt(i)){
// // return o2.charAt(i)-o1.charAt(i);
// // }
// // }
// int i,t=0;
// for( i = 0; i<len2/len1;i++){
// if(o2.substring(len1*i, len1*i+len1).compareTo(o1)==0){
// continue;
// }
// return o2.substring(len1*i, len1*i+len1).compareTo(o1);
// }
// for(int j = len1*i;j <len2;j++){
// if(o1.charAt(t) != o2.charAt(j)){
// return o2.charAt(j)-o1.charAt(t++);
// }
// }
// // return o2.charAt(len2-1)-o1.charAt(++t);
// return len1-len2;
// // return o2.substring(len1, len2).compareTo(o1) ;
// }else if(len1 > len2){
// int i,t=0;
// for(i = 0; i<len1/len2 ;i++){
// if( o2.compareTo(o1.substring(len2*i, len2*i+len2))==0){
// continue;
// }
// return o2.compareTo(o1.substring(len2*i, len2*i+len2));
// }
// for(int j = len2 * i;j < len1;j++){
// if(o1.charAt(j) != o2.charAt(t)){
// return o2.charAt(t++)-o1.charAt(j);
// }
// }
// return len1-len2;
// // return o2.charAt(++t)-o1.charAt(len1-1);
// // for(int i = 0; i < len2; i++){
// // if(o1.charAt(i) != o2.charAt(i)){
// // return o2.charAt(i)-o1.charAt(i);
// // }
// // }
// // return o2.compareTo(o1.substring(len2, len1));
// }else{
// // System.out.println(o2.compareTo(o1));
// return o2.compareTo(o1);
// }
// // return o2.compareTo(o1);
// }
// });
Collections.sort(array, new Comparator<String>() { //比较s1+s2和s2+s1就行了
@Override
public int compare(String o1, String o2) {
return (o2+o1).compareTo(o1+o2);//1交换 -1不交换
}
});
StringBuilder sb = new StringBuilder();
for(String s : array){
sb.append(s);
}
return sb.toString().charAt(0)=='0'?"0":sb.toString();
}
}