leetcode原题: 最大数
题目:
给定一组非负整数 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:
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;}
};