最大数-LintCode

给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
注意事项:
最后的结果可能很大,所以我们返回一个字符串来代替这个整数。
样例:
给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201。
挑战 :
在 O(nlogn) 的时间复杂度内完成。

#ifndef C184_H
#define C184_H
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
bool comp(string a, string b)
{
    int i = 0;
    int m = a.size(), n = b.size();
    while (i < m && i<n )
    {
        if (a[i]>b[i])
        {
            return true;
            break;
        }
        else if (a[i] == b[i])
        {
            if (i == m - 1||i==n-1)
            {
                if (a[m - 1] > b[n - 1])
                    return true;
                else
                    return false;
            }
            ++i;
        }
        else
        {
            return false;
        }
    }
}
class Solution {
public:
    /*
    * @param nums: A list of non negative integers
    * @return: A string
    */  
    string largestNumber(vector<int> nums) {
        // write your code here
        if (nums.empty())
            return NULL;
        vector<string> vstr;
        for (auto c : nums)
            vstr.push_back(to_string(c));
        int len = vstr.size();
        sort(vstr.begin(), vstr.end(), comp);
        string s;
        for (auto c : vstr)
            s += c;
        int size = s.size();
        int i = 0;
        while (i < size - 1)
        {
            if (s[i] == '0')
                ++i;
            else
                break;
        }
        return s.substr(i);
    }
};
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值