早上寫完看到原來只要比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);
}