<span style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background-color: rgb(255, 255, 255);">Given a list of non negative integers, arrange them such that they form the largest number.</span>
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.
给定一个非负整数list,将他们排列成一个最大的数字。
例如给定[3, 30, 34, 5, 9],,他们能组成的最大数字是9534330。
注意:结果可能是非常大的数,所以你必须返回一个字符串。
这题可以用冒泡排序不断取两个数前后组合看怎么组合最大,但是时间复杂度为O(n2),不能ac,所以只能调用系统的sort函数进行快排。
现将所有int转为string,然后利用先写的比较大小的函数bool cmp(string s1,string s2)组合比较。代码如下:
bool cmp(string s1,string s2)
{
return (s1+s2)>(s2+s1);
}
class Solution {
public:
string largestNumber(vector<int> &num) {
vector<string> s_vec(num.size());
stringstream stream;
string s_swap;
for(int i=0;i<num.size();i++)
{
stream<<num[i];
stream>>s_vec[i];
stream.clear();
}
sort(s_vec.begin(),s_vec.end(),cmp);
string result;
for(int i=0;i<num.size();i++)
{
result+=s_vec[i];
if(result=="0") return result;
}
return result;
}
};