给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。
注意事项:
最后的结果可能很大,所以我们返回一个字符串来代替这个整数。
样例:
给出 [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