一道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;
    }
};
posted on 2017-10-04 14:24 flyingwaters 阅读(762) 评论(0) 收藏 举报
 
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号