例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
实际上数组中的数存在全序关系,即如果 a > b 且 b > c,则 a > c.
如,3和32放在一起,要么是332要么是323,可得 3 > 32. 同样可得 32 > 321.
所以只要重新定义好 sort 的比较函数即可;
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
int len = numbers.size();
vector<int> index(len);
for (int i = 0; i < len; i++) index[i] = i;
vector<string> str;
for (auto num: numbers) str.push_back(to_string(num));
sort(index.begin(), index.end(), [&](int a, int b) {
return str[a] + str[b] < str[b] + str[a];
});
string res;
for (auto idx: index) {
res += str[idx];
}
return res;
}
}; 
京公网安备 11010502036488号