讨论区看到一个解法,非常的清晰,缺点是需要构造一个vector
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> strs;
for(auto num:nums)
strs.push_back(to_string(num));
sort(strs.begin(),strs.end(),[](const string& s1,const string& s2){return s1 + s2 > s2 + s1;});
string res;
for(auto str:strs)
res += str;
while(res[0] == '0' && res.size() > 1)
res.erase(0,1);
return res;
}
};
运行效率:
执行用时:8 ms, 在所有 C++ 提交中击败了72.86%的用户
内存消耗:11.2 MB, 在所有 C++ 提交中击败了12.64%的用户
尝试转换数字,发现运行效率更低:
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);
return res[0] == '0' ? "0":res;
}
};
运行效率:
执行用时:20 ms, 在所有 C++ 提交中击败了18.31%的用户
内存消耗:10.9 MB, 在所有 C++ 提交中击败了47.30%的用户