LeetCode No.179**

给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

示例 1:

输入: [10,2]
输出: 210
示例 2:

输入: [3,30,34,5,9]
输出: 9534330

解题思路:这题思路很简单,将数值转换成string类型数据后将大的放置在栈的上方即可。

系统自带的比较方法是: “3” 比 “31”小,而咱们需要的结果是 “3” 排在 “31”前方。因此自己构造了一个比较方法,

利用比较 A+B > B+A来判断,非常好。

此外还有一个小细节,如果输入都为0,那么最后输出值为一个0而不是许多0。

struct strgreater
{
    bool operator()(std::string& str1, std::string& str2)
    {
       if(str1+str2 < str2+str1)
           return true;
       else
           return false;
    }
};

//179
string largestNumber(vector<int>& nums)
{
    string res;
    if(nums.empty()) return res;

    //priority_queue<string> q;//默认从大到小顺序出队
    priority_queue<string,vector<string>,strgreater> q;
    for(size_t i=0;i<nums.size();i++)
        q.push(to_string(nums[i]));
    if(q.top()=="0") return "0";
    while(!q.empty())
    {
        res = res + q.top();
        q.pop();
    }
    return res;
}
原文地址:https://www.cnblogs.com/2Bthebest1/p/11182384.html