首先想到是把数组转化为字符串,然后按照字典序降序排序,但这样会出现结果不正确的情况,原因是第二个样例,当字符串相同时,30比3大,但3 30 比30 3大。
这里的做法是直接方案to_string(a) + to_string(b) > tostring(b) + to_string(a)的方式进行排序。
class Solution {
public:
string largestNumber(vector<int>& nums) {
sort(nums.begin(),nums.end(),[](int a, int b){
return to_string(a)+to_string(b)>to_string(b)+to_string(a);
});
string res="";
for(auto num:nums){
res+=to_string(num);
}
if(res[0]=='0') return "0";
return res;
}
};