给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入:[10,2]
输出:210
示例 2:
输入:[3,30,34,5,9]
输出:9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
题目分析:首先,将vector内的数都转换成string类型,便于后面的比较大小和输出。然后,定义cmp比较函数,假设有数字m,数字n,数字m排在n前面的条件是mn>nm,这里的是简单的将两个数串联起来,例如m=12,n=35,mn=1235. 最后按序输出数组内的元素即可。特别要注意如果第一个数字是0的话,输出0,防止[0,0]这样的情况发生输出00.
代码展示:
class Solution {
public:
static bool cmp(const string& str1,const string& str2){
string str3 = str1+str2;
string str4 = str2+str1;
return str3>str4;
}
string largestNumber(vector<int>& nums) {
vector<string> string_nums;
for(auto num:nums){
string_nums.push_back(to_string(num));
}
sort(string_nums.begin(),string_nums.end(),cmp);
string str = "";
if(string_nums[0]=="0")
return "0";
for(auto string_num:string_nums){
str += string_num;
}
return str;
}
};