题目:
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
思路:重构一个比较器
class Solution {
public String largestNumber(int[] nums) {
Integer[]num=new Integer[nums.length];
int i=0;
for(int numm:nums){
num[i++]=numm;
}
//Comparator中<只有一个类型无,>
//new Comparator<Integer> <>中的Integer一定要有
Comparator<Integer>cm=new Comparator<Integer>(){
//比较器中重写的函数为动词compare,且函数名后不带<Integer,Integer>
@Override
public int compare(Integer num1,Integer num2){
int temp1=num1;
int temp2=num2;
int temp22=num2;
int res1=0;
int res2=0;
if(num1==0)return 1;//情况考虑周全数字,0-很大,边界
if(num2==0)return -1;
while(num1!=0){
num1=num1/10;
temp2=temp2*10;
}
res1=temp2+temp1;
while(num2!=0){
num2=num2/10;
temp1=temp1*10;
}
res2=temp1+temp22;
return res1-res2;
}//句子完成要;
};
Arrays.sort(num,cm);//别少了一个s!!
if(num[0]==0)return"0";
StringBuilder str1=new StringBuilder();
for(int numss:num){
str1.append(numss);
}
String resstr=str1.toString();//toString 不是Stringto
return resstr;
}
}
compare
int compare(T o1, T o2)
比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。
Java中要求是T为泛型,泛型要求包容的是对象类型,而基本数据类型在Java中不属于对象。但是基本数据类型有其封装类,且为对象类型。