Re: [闲聊] 每日leetcode

楼主: enmeitiryous (enmeitiryous)   2024-09-18 21:31:54
早上写完看到原来只要比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);
}
作者: Lilchicken (小鸡 )   2024-09-18 21:33:00
好 你很棒
楼主: enmeitiryous (enmeitiryous)   2024-09-18 21:41:00
谢谢版主

Links booklink

Contact Us: admin [ a t ] ucptt.com