1. 程式人生 > >一道leetcode題的收獲如何比較字符串的大小重寫sort中的compare[](string &s,string &t){return s+t>t+s};

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

etc ++ ansi 匿名 gin leet clas size_t first

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;
}
};

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