错误思路:按照每个数字由小到大排序来做的话,对于第一个数字相同的不适用。比如:57 58 5 6
正解思路:使用传递性,将整个数组排序,如果ab比ba小,则把a放在b的前面,最后将整个数组合并即可。
class Solution {
public:
string minNumber(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(), nums.end(), [](int a, int b) {
string s1 = to_string(a);
string s2 = to_string(b);
return s1 + s2 < s2 + s1;
});
string ans;
for (auto& a : nums) {
ans += to_string(a);
}
return ans;
}
};
题目说 前导0不用处理,所以0 0 0这种输出“000”即可,最后不用处理。