把数字排成最小数字
输入非负整数数组,把数组里所有数字拼接起来成一个数,输出其中最小的一个数字。
例如:
输入:【10,2】
输出:“102”
输入:【3,30,34,5,9】
输出:“3033459”
自定义快速排序
class Solution{
public String minNumber(int[] nums){
String[] strs = new String[nums.length];
for(int i=0; i<nums.length;i++){
strs[i] = String.valueOf(nums[i]);
}
quickSort(strs,0,strs.length -1);
StringBuilder res = new StringBuilder();
for(String s:strs){
res.append(s);
}
return res.toString();
}
void quickSort(String[] strs, int l, int r){
if(l>=r) return;
int i=l,j=r;
String tmp = strs[i];
while(i<j){
while((strs[j]+strs[l]).compareTo(strs[l]+strs[j])>=0 && i<j) j--;
while((strs[i]+strs[l]).compareTos(strs[l]+strs[i])<=0&&i<j) i++;
tmp = strs[i];
strs[i]=strs[j];
strs[j]=tmp;
}
strs[i]=strs[l];
strs[l]=tmp;
quickSort(strs,l,i-1);
quickSort(strs,i+1,r);
}
}
内置函数方法
class Solution{
public String minNumber(int[] nums){
String[] strs = new String[nums.length];
for(int i=0; i<nums.length;i++){
strs[i] = String.valueOf(nums[i]);
}
Arrays.sort(strs,(x,y)->(x+y).compareTo(y+x));
StringBuilder res = new StringBuilder();
for(String s:strs){
res.append(s);
}
return res.toString();
}
}