题目链接:
https://leetcode-cn.com/problems/largest-number/
cmp想要实现的目的都是从大到小降序排列
注意:
C++和python的逻辑是相反的
python中:
s1>s2 返回的是-1
s1<s2 返回的是1
C++中:
s1>s2 返回的是true
else 返回的是false
python代码:
def cmp(a,b):
s1=str(a)+str(b)
s2=str(b)+str(a)
if s1>s2:
return -1
elif s1<s2:
return 1
else:
return 0
class Solution:
def largestNumber(self, nums: List[int]) -> str:
nums.sort(key=functools.cmp_to_key(cmp))
a=[str(s) for s in nums]
ans=""
for s in a:
ans+=s
if ans[0]=='0':
return "0"
else:return ans
C++代码:
class Solution {
public:
string int_to_str(int x){
if(x==0) return "0";
string s="";
while(x!=0){
char c=x%10+'0';
s+=c;
x/=10;
}
reverse(s.begin(),s.end());
return s;
}
static bool cmp(string x,string y){
string s1=x+y;
string s2=y+x;
return s1>s2;
}
string largestNumber(vector<int>& nums) {
vector<string> a;
for(auto x:nums)
a.push_back(int_to_str(x));
sort(a.begin(),a.end(),cmp);
string s="";
for(auto t:a)
s+=t;
int i,n=s.size();
for(i=0;i<n;i++)
if(s[i]!='0') break;
if(i==n) return "0";
else return s;
}
};