题目
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.
题意
给出一组非负整数,重新组织它们,使得它们能组成一个最大的数。
比如,给出 [3, 30, 34, 5, 9]
,它们能组成的最大的数是9534330
。
注意:结果可能会非常大,所以你需要返回一个字符串而不是一个整数。
分析
这道题其实很简答,只要对这组数据进行排序,然后把排序好的数组拼接成一个字符串即可。要注意的地方如下:
1、
[31、3]
的结果应该是[3、31]
,而[34、3]
的结果应该是[34、3]
,所以排序的时候,不是简单地对数字进行大小比较。如果直接比较数字的大小会比较麻烦。
这里有个简单的做法,就是把数字变成字符串,
["31","3"]
,然后把数字加起来,比较"31"+"3"
与"3"+"31"
。2、对于
[0,0,0]
,得到的结果应该是0,而不是000,即结果应该剔除字符串首部的0
代码
string largestNumber(vector<int>& nums) {
vector<string> vec;
for(int i=0;i<nums.size();i++){
vec.push_back(to_string(nums[i]));
}
for(int i=0;i<vec.size();i++){
for(int j=i+1;j<vec.size();j++){
if(vec[i]+vec[j] < vec[j]+vec[i]){
swap(vec[i], vec[j]);
}
}
}
string str = "";
for(int i=0;i<vec.size();i++)
str+=vec[i];
while(str[0]=='0' && str.length()>1)
str.erase(0,1);
return str;
}
221 / 221 test cases passed.
Runtime: 9 ms