题目描述:
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入:[10,2]
输出:210
示例 2:
输入:[3,30,34,5,9]
输出:9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
思路:这里使用了一个比较逻辑,就是如果字符串数组中相邻两位如a,b,都有a+b>b+a,那么按照这个比较逻辑排序得到的数组,从头到尾相连得到的字符串一定是最大的(可用反证法证明),通过自定义的compare函数以及sort函数排序,然后把字符串数组中的字符串相连
代码:
class Solution {
public:
static bool compare(string &a, string &b){
string s1=a+b;
string s2=b+a;
if(s1>s2)
return true;
else
return false;
}
string largestNumber(vector<int>& nums) {
string s="";
int length=int(nums.size());
if(length==0)
return s;
vector<string> strings;
int i;
int count_0=0;
for(i=0;i<length;++i)
{
if(nums[i]==0 ) count_0++;
strings.push_back(to_string(nums[i]));
}
if(count_0==length)
return "0";
if(length==1){
s+=strings[0];
return s;
}
sort(strings.begin(), strings.end(), compare);
for(i=0;i<length;++i)
s+=strings[i];
return s;
}
};