---
# System prepended metadata

title: 179. Largest Number
tags: [Leetcode, medium, python, c++, sort]

---

###### tags: `Leetcode` `medium` `sort` `python` `c++`

# 179. Largest Number

## [題目連結:] https://leetcode.com/problems/largest-number/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"
```

## 解題相法:
* 題目為給一數組，求將其所有字符組成最大值的字串

## Python
* 使用compare比較:
    * **def __ lt __()**: less than
    * 比較:str(x) + str(y) > str(y) + str(x) 

``` python=
class Solution(object):
    def largestNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: str
        """
        ans = sorted([str(val) for val in nums], key=compare)
        ans = ''.join(ans)
        return ans if ans[0]!='0' else '0'
    
class compare(str): #less than
    def __lt__(a,b):
        return a+b>b+a
    
result = Solution()
nums = [3,30,34,5,9]
ans=result.largestNumber(nums)
print(ans)
```

## C++:
* 對於 bool compare():
    * 需要加 **static** 否則會報錯
        * 錯誤內容: reference to non-static member function must be called
    * 說明: https://www.twblogs.net/a/5d660a9ebd9eee5327fe7083
``` cpp=
#include<bits/stdc++.h>
using namespace std;

class  Solution{
public:
    string largestNumber(vector<int>& nums){
        string res;
        //<algorithm>
        sort(nums.begin(), nums.end(), compare);
        if (nums[0]==0)
                  return "0";
        for (auto val:nums){
                  res+=to_string(val);
        }
        return res;
    }
    static bool compare(int a, int b){
        string str1=to_string(a);
        string str2=to_string(b);
        return str1+str2>str2+str1;
    }
};

int main(){
    Solution res;
    vector<int> nums={3,30,34,5,9};
    string ans=res.largestNumber(nums);
    cout<<ans<<endl;
    return 0; //9534330
}
```