题目来源
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9]
, the largest formed number is 9534330
.
Note: The result may be very large, so you need to return a string instead of an integer.
首字母不一样的很好就能区别大小,直接比较字符串大小就可以了,主要是首字母一样的情况下,不太好判断。
突然想到可以把所有的都填充成一样长的,后面填充a
,然后比较大小,然后再把所有的a
都去掉。这样子应该是可行的!
刚才的想法是错的,比如34,3这种情况就没考虑。
想了挺久还是没想出正确答案,然后看了讨论区的答案。
感觉还是做题做的太少了,或者说C++的知识太弱了,根本不知道sort的这种用法。
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> Snums;
for (auto num : nums) {
Snums.push_back(to_string(num));
}
sort(Snums.begin(), Snums.end(), [](string &s1, string &s2){return s1 + s2 > s2 + s1;});
string res = "";
for (auto num : Snums)
res += num;
if (res[0] == '0')
res = "0";
return res;
}
};