LeetCode 179 最大数

传送门

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

示例 1:

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

示例 2:

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

说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。

数字可能很大,直接转成string,然后根据是否(a+b)>(b+a)定义先后序,排序后拼起来就是最大数。

注意全0的边界输入,此时应输出“0”,而不是多个“0”。

class Solution {
public:
    bool static cmp(string a, string b){
        return (a+b)>(b+a); //当a+b>b+a时a排在b前面
    }
    string largestNumber(vector<int>& nums) {
        int flag=0;
        vector<string> v;
        for(vector<int>::iterator i=nums.begin();i<nums.end();i++) {
            v.push_back(to_string(*i));
            if(*i) flag=1;
        }
        if(!flag) return "0";
        sort(v.begin(), v.end(), cmp); //没有生成实例就要调用,故cmp应声明为static
        string s="";
        for(int i=0;i<v.size();i++) s=s+v[i];
        return s;
    }
};

本地codeblocks没配置好C++11,C++98情况下需手写to_string。。

//C++ char转string真麻烦。。
string to_string(int a){
    string s="";
    while(a){
        char c=a%10+'0';
        stringstream stream; stream << c; string str = stream.str();
        s=str+s;
        a/=10;
    }
    return s;
}

Update: 2020/4/22

to_string更好的写法:

template <typename T>
std::string to_string(T value)
{
    std::ostringstream os ;
    os << value ;
    return os.str() ;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值