LeetCode179: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.

【分析】

组合这些数字得到最大,贪心的考虑,即对于任何两个数的组合,长度一样,选择字典序较大的组合,就可以全局最大。想到用sort排序,自己写比较函数。要注意特例:所有数字为0.

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
using namespace std;
class Solution {
public:
static bool des (const string &a, const string &b)
{
    string ab,ba;
   ab = a+ b;
   ba = b+a;
    return ab >ba;
}
    string largestNumber(vector<int> &num)
     {
     vector<string> numstr;
     bool allzero = true;
        for(int k:num)
        {
             if(k != 0) allzero = false;
            stringstream s1;
             s1 << k;
             string tmp;
             s1 >> tmp;
             numstr.push_back(tmp);
        }
        if(allzero)
            return "0";
        sort(numstr.begin(), numstr.end(), des);
        string result;
        for (string str : numstr)
        {
            result+= str;
        }
        return result;
    }
};
int main()
{
    Solution s;
    vector<int> v{3,30,34,5,9};
    cout << s.largestNumber(v)<< endl;
    return 0;
}
上面使用到了c++的一些特性,如stringstream,记得如果要多次使用stringstream对象,必须用clear()重置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值