Leetcode NO.179 Largest Number

来源:互联网 发布:剑灵可爱召唤捏脸数据 编辑:程序博客网 时间:2024/05/16 23:39

本题题目要求如下:

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.

这题的思路并不难,但是用的挺巧的。。。巧到我没有想到。虽然我也用别的办法解决了。。

整体框架就是把给定的vector<int>转化为vector<string>,然后从大到小排序。。。

然后将vector里面的元素依次取出放到需要返回的string里面即可。。

但是这里面涉及一个排序的问题。。我们需要定义一种sort的规则,而不是根据默认排序方法排序。。具体用法可以参考http://www.cplusplus.com/reference/algorithm/sort/

关键在于这个规则的书写,我开始写的非常复杂,把所有问题都考虑到。。。其实可以很巧妙:

<span style="white-space:pre"></span>static bool rule(string str1, string str2) {return (str1 + str2 > str2 + str1); }

全部代码如下:

class Solution {public:    string largestNumber(vector<int> &num) {        string retVal;        vector<string> num_str;        for (int i = 0; i < num.size(); ++i)        num_str.push_back(to_string(num[i]));        sort(num_str.begin(), num_str.end(), rule);        for (int i = 0; i < num_str.size(); ++i)        retVal.append(num_str[i]);        while (retVal[0] == '0' and retVal.length() > 1)        retVal.erase(0, 1);        return retVal;    }private:static bool rule(string str1, string str2) {return (str1 + str2 > str2 + str1); }};


0 0