题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
class Solution {
public:
/*
static bool myCmp(string str1, string str2){
string cat1 = str1 + str2;
string cat2 = str2 + str1;
return cat1 < cat2;
}*/
//用函数对象
struct myCmp{
bool operator()(const string &str1, const string &str2)const{
string cat1 = str1 + str2;
string cat2 = str2 + str1;
return cat1 < cat2;
}
};
string PrintMinNumber(vector<int> numbers) {
string res = "";
int len = numbers.size();
if (len == 0){
return res;
}
vector<string> str;
for (int num : numbers){
str.push_back(to_string(num));
}
//注意使用匿名函数对象myCmp()
sort(str.begin(), str.end(),myCmp());
for (string s : str){
res += s;
}
return res;
}
};