题目:
给定一组非负整数 nums
,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
**注意:**输出结果可能非常大
所以你需要返回一个字符串而不是整数。
示例1:
输入:nums = [10,2]
输出:"210"
示例2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
解题思路:
首先,如果要组成最大的数,就要将数字首位数值最大的数排在前面,这里分为两种情况,首位数值不同、首位数值相同。首位数值不同,很好解决,数值大的放在前面即可,但是首位数值相同的话,我们不能直接确定大小。
例如[4,45] 可以组成445,454,454更大
但是[3,32] 组成332,323 ,332更大
所以我们需要将所有情况列出来,进行比较,才能知道哪种情况为最大值。
这里我们用到了lamda表达式来解决排序问题。
排序后,将数组放进一个字符串里即可。
最后返回是,如果字符串首字符为'0',那么我们返回字符串"0",否则按正常情况处理。
Code:
cpp
class Solution {
public:
string largestNumber(vector<int>& nums) {
//先将数组转成字符串
vector<string> str;
for(auto i:nums)
{
str.push_back(to_string(i));
}
//对字符串数组进行排序,这里使用lamda表达式来实现排序
//例如[4,45] 要比较445和454的大小,按数值大的在前进行排序
sort(str.begin(),str.end(),[](const auto& A,const auto& B){
return A+B>B+A;
});
//将字符串数组中的字符串放入到一个字符串中
string ans;
for(const auto& a:str)
{
ans+=a;
}
//如果字符串的首字符为'0',直接返回字符串"0"
return ans[0]=='0'?"0":ans;
}
};