每日一练-leetcode
剑指 Offer 45. 把数组排成最小的数
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入:[10,2]输出: "102"
示例 2:
输入:[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();
}
public void quickSort(String[] args,int l,int r){
if(l >= r)return;
int i = l,j = r;
while(i < j){
while((args[j]+args[l]).compareTo(args[l]+args[j]) >= 0 && i < j)j--;
while((args[i]+args[l]).compareTo(args[l]+args[i]) <= 0 && i < j)i++;
swap(args,i,j);
}
swap(args,i,l);
quickSort(args,l,i-1);
quickSort(args,i+1,r);
}
public void swap(String[] argss,int x,int y){
String temp ;
temp = argss[y];
argss[y] = argss[x];
argss[x] = temp;
}
}
知识点:
如何将字符串数组改为字符串
StringBuilder res = new StringBuilder();//StringBuilder类型
for(String s:strs){
res.append(s); }
res.toString();//转为字符串类型
写交换函数时不能写成
public void swap(int x,int y)
因为这样改的只是形参而非数组中实参。
String.valueOf()//转为String函数
compareTo() 方法用于将 Number 对象与方法的参数进行比较。可用于比较 Byte, Long, Integer等。
该方法用于两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较。
-
如果指定的数与参数相等返回0。
-
如果指定的数小于参数返回 -1。
-
如果指定的数大于参数返回 1。
方法二:内置函数排序
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();
}
浙公网安备 33010602011771号