https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/
思路
本质上是一个排序问题。可选用任一排序方法,这里用的是快排。
有字符串x,y,如果x+y>y+x,那么x大。
步骤:
①将数组中的数组转化为字符串
②排序
③把结果拼接成字符串返回
代码
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]);
}
mysort(strs,0,nums.length-1);
StringBuilder res=new StringBuilder();
for(String s:strs){
res.append(s);
}
return res.toString();
}
public void mysort(String[] strs,int left,int right){
if(left>=right)
return;
int i=left,j=right;
String temp=strs[i];
while(i<j){
while((i<j)&&((strs[j]+strs[left]).compareTo(strs[left]+strs[j])>=0)){
j--;
}
while((i<j)&&((strs[i]+strs[left]).compareTo(strs[left]+strs[i])<=0)){
i++;
}
temp=strs[i];
strs[i]=strs[j];
strs[j]=temp;
}
temp=strs[left];
strs[left]=strs[i];
strs[i]=temp;
mysort(strs,left,i-1);
mysort(strs,i+1,right);
}
}
复杂度
时间复杂度 O(NlogN) :N 为最终返回值的字符数量;使用快排或内置函数的平均时间复杂度为O(NlogN) ,最差为 O(N^2)
空间复杂度 O(N): 字符串列表 strs占用线性大小的额外空间。