题目描述:
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:“210”
示例 2:
输入:nums = [3,30,34,5,9]
输出:“9534330”
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 109
c++代码:
class Solution {
public:
static bool cmp(const string &a, const string &b){
string s1=a,s2=b;
string ss1=s1+s2,ss2=s2+s1;
return ss1>ss2;
}
string largestNumber(vector<int>& nums) {
int n=nums.size();
vector<string> v;
for(int i=0;i<n;i++){
v.push_back(to_string(nums[i]));
}
sort(v.begin(),v.end(),cmp);
string res="";
for(int i=0;i<n;i++){
res+=v[i];
}
if(res[0]!='0'||res=="0")return res;
int index=-1;
for(int i=0;i<res.length();i++){ //去除先导0
if(res[i]!='0'){
index=i;break;
}
}
if(index!=-1)res=res.substr(index);
else if(index==-1)res="0";
return res;
}
};
利用string比较的特性,把数字数组转为字符串数组排序
总结:
重写cmp函数
注意最后生成的数字字符串要去除先导0