179. Largest Number

问题描述

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

题目链接:


思路分析

给一数组,将它合成一个最大的数,以string形式返回。

关键在于要将首位最大的数放在前面,这就需要自己设计一个sort的comparator,sort的条件是对比两个string相加的值,将大的放在前面,这就是一个冒泡排序,只不过STL给我们简化了。

然后将结果res string的前面不合理的0都去掉就可以了。

代码

class Solution {
public:
    string largestNumber(vector<int>& nums) {
        vector<string> str;
        for (auto i : nums)
            str.push_back(to_string(i));
        sort(str.begin(), str.end(), [](string& s1, string& s2){ return s1 + s2 > s2 + s1;});
        string res = "";
        for (auto s : str)
            res += s;
        while (res[0] == '0' && res.length() > 1)
            res.erase(0, 1);
        return res;
    }
};

时间复杂度:O(n)
空间复杂度:O(n)


反思

关键在于sort的comparator的设计,在函数内部inline重载。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BigFatSheep/article/details/79973272
个人分类: Leetcode Medium
上一篇29. Divide Two Integers
下一篇54. Spiral Matrix
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭