输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
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();
}
public void Quicksort(String[] strs,int l,int r){
if(l >= r){
return;
}
int i = l;
int j = r;
String temp = strs[i];
while(i < j){
while(i < j && (strs[j]+strs[l]).compareTo(strs[l]+strs[j]) >= 0){
j--;
}
while(i < j && (strs[i]+strs[l]).compareTo(strs[l]+strs[i]) <= 0){
i++;
}
temp = strs[i];
strs[i] = strs[j];
strs[j] = temp;
}
strs[i] = strs[l];
strs[l] = temp;
Quicksort(strs,l,i-1);
Quicksort(strs,i+1,r);
}
}
执行用时:4 ms, 在所有 Java 提交中击败了96.99%的用户
内存消耗:41.2 MB, 在所有 Java 提交中击败了31.64%的用户
通过测试用例:222 / 222