Re: [閒聊] 每日leetcode

看板Marginalman作者 (enmeitiryous)時間1年前 (2024/09/18 21:31), 編輯推噓1(101)
留言2則, 2人參與, 1年前最新討論串877/1548 (看更多)
早上寫完看到原來只要比a+b和b+a就真的快吐血了 題目:179. largest number 給你一個整數vector,求把他們當成字串後串起來能得到的最大數字,顯然可能超過 數字表達範圍故請回傳成string 思路:概念不難但很多小地方要注意的一題,因為顯然是要greedy的把單一位數字大的 盡量串到前面,所以可以先一個個digit去比,如果遇到兩個數不等長像60040和60,則必 需比完前面共同長度(=2)後,如果相等則把6040切割出040這個未比較過的字串和60去遞 迴用上面規則去比直到比較完,排序完後依序加到ans字串後再把出現在前面的0捨去掉 static bool mygo(string ste1,string ste2){ int templen=0; if(ste2.size()<ste1.size()){ templen=ste2.size(); } else{ templen=ste1.size(); } for(int i=0;i<templen;++i){ if((ste1[i]-'0')>(ste2[i]-'0')){ return true; } else if((ste1[i]-'0')<(ste2[i]-'0')){ return false; } } if(ste1.size()==ste2.size()){ return false; } else{ if(ste2.size()<ste1.size()){ return mygo(ste1.substr(ste2.size(),ste1.size()-ste2.size()),ste2); } else{ return mygo(ste1,ste2.substr(ste1.size(),ste2.size()-ste1.size())); } } } static string largestNumber(vector<int>& nums) { vector<string> gogo; for(auto k:nums){ gogo.push_back(to_string(k)); } sort(gogo.begin(),gogo.end(),mygo); string ans=""; for(auto k:gogo){ ans+=k; } int yo=0; for(int i=0;i<ans.size()-1;++i){ if(ans[i]=='0'){ yo++; } else{ break; } } return ans.substr(yo,ans.size()-yo); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.196.198 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1726666316.A.6C9.html

09/18 21:33, 1年前 , 1F
好 你很棒
09/18 21:33, 1F

09/18 21:41, 1年前 , 2F
謝謝版主
09/18 21:41, 2F
文章代碼(AID): #1cwjPCR9 (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1cwjPCR9 (Marginalman)