讨论区看到一个解法,非常的清晰,缺点是需要构造一个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%的用户