Re: [閒聊] 每日leetcode
看板Marginalman作者enmeitiryous (enmeitiryous)時間1年前 (2024/09/18 21:31)推噓1(1推 0噓 1→)留言2則, 2人參與討論串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
討論串 (同標題文章)
完整討論串 (本文為第 877 之 1548 篇):