Description

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

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

Example 1:

Input: nums = [10,2] Output: “210”

Example 2:

Input: nums = [3,30,34,5,9] Output: “9534330”

Constraints:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 109

Code

要排就要先排大的,string 相加的 comparator 其實就是在做字串排序比大小了,看看誰放前面會比較大。

Edge Case:nums = [0, 0]

Time Complexity: , Space Complexity:

class Solution {
public:
    string largestNumber(vector<int>& nums) {
        vector<string> s;
        for(auto n: nums) {
            s.push_back(to_string(n));
        }
 
        sort(s.begin(), s.end(), [](const string& s1, const string& s2){return s1 + s2 > s2 + s1;});
 
        string res = "";
        for(auto ss: s) {
            res += ss;
        }
 
        while(res[0] == '0' && res.length() > 1) {
            res.erase(0, 1);
        }
 
        return res;
    }
 
 
};
class Solution {
public:
    string largestNumber(vector<int>& nums) {
        string res = "";
 
        sort(nums.begin(), nums.end(), [](const int a, const int b) {return (to_string(a) + to_string(b)) > (to_string(b) + to_string(a));});
        
        for(auto n: nums) {
            res += to_string(n);
        }
 
        while(res.length() > 1 && res[0] == '0') res.erase(res.begin());
        return res;
    }
 
 
};

Source