最大数
最大数
问题描述
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-number
思路
将int数组转化为字符串,将字符串按从大到小的顺序排序,这里需要注意的是手写cmp比较字符串的大小时,用return str1+str2>str2+str1;将排序好的string类型的数组拼接成一个字符串。最后必须要进行除0操作。如"00"->"0","0123"->"123"
题解
class Solution {
public:
static bool cmp(string str1,string str2){
return str1+str2>str2+str1;
}
string largestNumber(vector<int>& nums) {
vector<string> tmp;
for(int i=0;i<nums.size();i++){
tmp.push_back(to_string(nums[i]));
}
string ret="";
int n=tmp.size();
sort(tmp.begin(),tmp.end(),cmp);
for(int i=0;i<n;i++){
ret+=tmp[i];
}
int flag=0;
int location=0;
for(int i=0;i<ret.size();i++){
if(ret[i]!='0'){
flag=1;
location=i;
break;
}
}
if(flag==0) ret="0";
else{
string ret1="";
for(int i=location;i<ret.size();i++){
ret1+=ret[i];
}
ret=ret1;
}
return ret;
}
};