一道leetcode题的收获如何比较字符串的大小重写sort中的compare[](string &s,string &t){return s+t>t+s};

KEY:一种很好的想法,写法也很好,使用for(auto i:num)遍历访问num

lambda表达式重写比较compare参数,相当完美

while处理[0,0,0]情况的输出。优雅的解决问题。perfect!

class Solution {
public:
string largestNumber(vector<int> &num) {
vector<string> arr;
//类似python的容器遍历模式
for(auto i:num)
arr.push_back(to_string(i));
//变成字符串压进arr中,C++11新增加的全局函数to_string()
sort(begin(arr), end(arr), [](string &s1, string &s2){ return s1+s2>s2+s1; });
//compare参数实现,匿名函数lambda,这种比较方法的可行性ASCII码的比较,0对应dec的48 in ASCII中美国标准信息交换代码ANSI制定
string res;
for(auto s:arr)
res+=s;
while(res[0]=='0' && res.length()>1)
res.erase(0,1);
/*erase函数的原型如下:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是说有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
*/
return res;
}
};

原文地址:https://www.cnblogs.com/fenglongyu/p/7625613.html