[Leetcode] 179. Largest Number 解题报告

来源:互联网 发布:第六季网络复活赛 编辑:程序博客网 时间:2024/06/06 04:28

题目

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.

思路

这道题目的思路不难,主要有三个步骤:1)重写一个特殊的比较函数,使得首位越大的数字排的越靠前;2)利用步骤1)提供的比较函数进行排序;3)将排好序的数字依次转换为字符串,并且连接起来。这里需要注意一个特殊情况,就是所有数字都是0的情况,此时不能返回“00000”等样子,而要返回“0”。我原来写的比较函数有好几十行,但时候后来发现网上有同学用C++的stl提供的to_string方法,巧妙地实现了需要的功能,代码量立即下降到十行之内。

代码

class Solution {public:    string largestNumber(vector<int>& nums) {        if (nums.size() == 0) {            return "";        }        auto cmp = [](int a, int b) {            return to_string(a) + to_string(b) > to_string(b) + to_string(a);        };        sort(nums.begin(), nums.end(), cmp);        string ret;        for (auto val : nums) {            ret += to_string(val);        }        return ret[0] == '0' ? "0" : ret;    }};