剑指offer. 45 把数组排成最小的数(重要)
题目描述:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
实际上只要定义一种排序规则即可:两个数a,b 假如 ab>ba,那a就大于b,而ab和ba的大小比较可以用字符串大小比较的规则代替。
还有一个重点是
sort(vec.begin(),vec.end(),
[](const string &a,const string &b){return (a+b)<(b+a);}); // sort是按true排在前面来的,所以要最小的数,那么就还是小于
代码:
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
string res;
if(numbers.empty())
return res;
vector<string> vec;
int len = numbers.size();
for(int i=0;i!=len;++i){
vec.push_back(to_string(numbers[i]));
}
sort(vec.begin(),vec.end(),
[](const string &a,const string &b){return (a+b)<(b+a);}); // sort是按true排在前面来的,所以要最小的数,那么 就还是小于
for(int i=0;i!=len;++i){
res +=vec[i];
}
return res;
}
};