1.解析
我们一般使用的排序比较大小都是
a>b 那么a在b的前面
a=b 无所谓
a<b a在b的后面
本题的排序则是
ab>ba 那么a在b的前面
ab=ba 无所谓
ab<ba a在b的后面
2.代码
class Solution {
public:
string largestNumber(vector<int>& nums) {
//1.先把所有的数字转成string
//2.对sort这个排序进行转化
//3.提取结果
//特殊处理:如果第一个位置为0,那这个字符串就是全0
vector<string> strs;
for(int num:nums)
{
strs.push_back(to_string(num));
}
sort(strs.begin(),strs.end(),[](const string &s1,const string &s2)
{
return s1+s2>s2+s1;
});
string ret;
for(auto& s:strs)
{
ret+=s;
}
if(ret[0]=='0') return "0";
return ret;
}
};
补充语法:lambda 表达式
[capture_list] (parameters) -> return_type { function_body }
-
capture_list:捕获列表,捕获外部作用域的变量,可以为空
-
-
parameters:参数列表,和正常的函数一样
剩下的就是返回值类型(C++14之后可以省略,会自动推导),和函数主体,第一次看感觉这个东西的写法有点奇怪,在上面的代码中就是sort的一个参数。