<p>Given a list of non-negative integers <code>nums</code>, arrange them such that they form the largest number and return it.</p>

<p>Since the result may be very large, so you need to return a string instead of an integer.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [10,2]
<strong>Output:</strong> &quot;210&quot;
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [3,30,34,5,9]
<strong>Output:</strong> &quot;9534330&quot;
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums.length &lt;= 100</code></li>
	<li><code>0 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>

class Solution {
public:
    static bool cmp(int a, int b)
    {
        char x[64], y[64];
        snprintf(x, sizeof(x), "%d%d", a, b);
        snprintf(y, sizeof(y), "%d%d", b, a);
        return std::string_view(x) < std::string_view(y);
    }

    string largestNumber(vector<int>& nums) {
        std::sort(nums.begin(), nums.end(), cmp);
        std::string r;
        int s = 0;
        for (auto it = nums.rbegin(), end = nums.rend(); it != end; ++it) {
            char buf[25];
            snprintf(buf, sizeof(buf), "%d", *it);
            r += buf;
            s += !!*it;
        }
        if (s == 0)
            r = "0";
        return r;
    }
};
14200