bool cmp(const string &s1, const string &s2) {
string s3 = s1 + s2, s4 = s2 + s1;
return s3 > s4;
}
class Solution {
public:
string itos(int n) {
string s;
if (n == 0) return "0";
while (n) {
s = char('0' + n % 10) + s;
n /= 10;
}
return s;
}
string largestNumber(vector<int>& num) {
vector<string> vs;
bool all0 = true;
for (int i = 0; i < num.size(); ++i) {
vs.push_back(itos(num[i]));
if (num[i]) all0 = false;
}
if (all0) return "0";
sort(vs.begin(), vs.end(), cmp);
string ans;
for (int i = 0; i < num.size(); ++i) {
ans += vs[i];
}
return ans;
}
};