题目
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2] 输出:"210"
示例 2:
输入:nums = [3,30,34,5,9] 输出:"9534330"
示例 3:
输入:nums = [1] 输出:"1"
示例 4:
输入:nums = [10] 输出:"10"
提示:
1 <= nums.length <= 100
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
刷题以来第一次遇到这种类型的题目,想了很久都没有正确的思路。
还是看了题解:首先自定义排序,对于数a和数b,如果a+b>b+a,则让a排在b前面。但是为了避免和值过大,需要先将a和b转换为字符串。严格的证明在题解中都有。
同时需要注意输入全是0的情况,如果全是0,那么string的首位一定是0,这里需要多判断一下。
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> strs;
for(int i=0;i<nums.size();i++) { //转换成字符串存入strs中
strs.push_back(to_string(nums[i]));
}
sort(strs.begin(),strs.end(),[](const string &x, const string &y) {
return x+y>y+x;
});
string ans="";
for(int i=0;i<strs.size();i++) {
ans+=strs[i];
}
return ans[0]=='0'? "0" : ans;
}
};
收获
- 学会了vector自定义排序规则的方法,可以把cmp比较函数嵌入到sort中
- 知道了to_string()函数
- 对于这种排序问题,可以先转换成字符串再按照字符顺序排列

本文介绍如何解决LeetCode上的最大整数排列问题,通过自定义排序规则和字符串操作,实现将非负整数数组重新排列成最大整数。涉及技术包括字符串转换、自定义排序和特殊场景判断。
1103

被折叠的 条评论
为什么被折叠?



