【剑指Offer】把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321}
,则打印出这三个数字能排成的最小数字为321323
。
将数字转化为字符串,然后对字符串进行快速排序
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
string r;
vector<string> sr;
for(int i=0;i<numbers.size();i++){
sr.push_back(numberToString(numbers[i]));
}
sort(sr.begin(),sr.end(),compare);
for(int i=0;i<sr.size();i++){
r += sr[i];
}
return r;
}
string numberToString(int n) {
return (n>9?numberToString(n/10):"")+char(n%10+'0');
}
static bool compare(const string& a, const string& b){
return a+b<=b+a;
}
};