例如输入数组{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; } };