题目链接:https://leetcode-cn.com/problems/largest-number
题目描述:
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
示例 3:
输入:nums = [1]
输出:"1"
示例 4:
输入:nums = [10]
输出:"10"
重点:
1.将nums中的各数字转化成字符串格式。
2.排序。比较规则:两两字符串连接后比较。
3.拼接所有字符串。
难点:
1.int转string,to_string()方法。
2.泛型算法-lambda表达式。
https://zhuanlan.zhihu.com/p/303215825
NOTE:
我们还需要考虑一种特殊的情况:前导0
例如:输入[0,0],输出因该为 “0” 而不是“00”。
因为字符串数组是自定义降序,我们可以检查排好序的字符串数组的第一个元素是否为0:
如果第一个元素为0,说明后续若还有元素,也只能是0了,结果必然是0。
如果第一个元素不为0,则不会出现前导0的特殊情况。
题解:
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> str_nums;
string ans;
for(int i: nums)
{
str_nums.push_back(to_string(i));
}
sort(str_nums.begin(), str_nums.end(), [](string &a, string &b){return a + b > b + a;});
if(str_nums[0] == "0")
return "0";
for(string s: str_nums)
{
ans += s;
}
return ans;
}
};