179. 最大数
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210
示例 2:
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
解题思路: 我们可以先研究一下排序规则,假设给定不是一组数而是两个数,我们想让这两个数组成的数最大,那么很自然的就想到用str(a)+str(b)与str(b)+str(a)的关系来决定是使用ab排序还是使用ba排序,那么对于一组数,我们也可以用相同的思路来解题。
// 标签:排序
// 我们可以先研究一下排序规则,加入给定不是一组数
// 而是两个数,我们想让这两个数组成的数最大,那么
// 很自然的就想到用str(a)+str(b)与str(b)+str(a)的
// 关系来决定是使用ab排序还是使用ba排序,那么对于
// 一组数,我们也可以用相同的思路来解题
// Time:O(nlog(n)), Space:O(log(n))~O(1)
class Solution {
public:
string largestNumber(vector<int>& nums) {
auto cmp = [](int a, int b) {
string sa = to_string(a);
string sb = to_string(b);
return sa + sb > sb + sa;
};
sort(nums.begin(), nums.end(), cmp);
string res;
for (auto num : nums) {
res += to_string(num);
}
while (res.size() > 1 && res[0] == '0') {
res.erase(res.begin());
}
return res;
}
};