[LeetCode] 179. 最大数

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值