题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:把数组排序,自定义排序规则,规则就是相邻的两个数合并之后比较大小
比较规则 : a+b<b+a
加起来更小,那么整个数组排完序之后拼接起来就是最小的
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Solution {
public String PrintMinNumber(int [] numbers) {
String s="";
ArrayList<Integer> list=new ArrayList<Integer>();
int n=numbers.length;
for(int i=0;i<n;i++){
list.add(numbers[i]);//将数组放入arrayList中
}
//实现了Comparator接口的compare方法,将集合元素按照compare方法的规则进行排序
Collections.sort(list,new Comparator<Integer>(){
@Override
public int compare(Integer str1, Integer str2) {
String s1=str1+""+str2;
String s2=str2+""+str1;
return s1.compareTo(s2);
}
});
for(int j:list){
s+=j;
}
return s;
}
}
C++版
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
if(numbers.size()==0)return "";
vector<string> str;
for(int i:numbers){
str.push_back(to_string(i));
}
sort( str.begin(), str.end(),[](string a,string b){
return a+b<b+a;
});
string ret;
for (string s:str){
ret+=s;
}
return ret;
}
};