题目描述
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
解题思路
- 将每个数字转换成字符串
- 对字符串从大到小排序
- 将排好序的字符串拼接到结果字符串中,返回
代码如下
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> str;
for(auto num:nums)
{
str.push_back(to_string(num));//将每个数字转换成字符串
}
sort(str.begin(),str.end(),cmp);//对字符串从大到小排序
string res;
bool isZero=true;//是否所有数字全是0,全为0时为true
for(auto s:str)
{
if(isZero)
{
if(s=="0")
continue;
isZero=false;
}
res.append(s);
}
return res.empty()? "0":res;
}
static bool cmp(const string &a,const string &b)//排序函数
{
string ab=a+b;
string ba=b+a;
for(int i=0;i<ab.size();i++)
{
if(ab[i]==ba[i])
continue;
return ab[i]-'0' > ba[i]-'0';
}
return ab[0]-'0' > ba[0]-'0';
}
};
提交结果:
![535d083fffae242c8301531fd9f2ae1a.png](https://i-blog.csdnimg.cn/blog_migrate/6be619bd3aa2aac20c32f98e55c31983.jpeg)