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.
这个题虽然属于排序的类型,但是排序就交给STL函数了。sort()函数写一个函数指针就OK;
把数字转换为字符串是好的方法,这样比较起来容易一些。
注意特殊情况,如果输入时[0,0]。
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> str;
for(int i=0;i<nums.size();i++)
{
str.push_back(tostring(nums[i]));
}
sort(str.begin(),str.end(),strcmp);
string res;
for(int i=0;i<str.size();i++)
{
res+=str[i];
}
if(res[0]=='0') return "0";//考虑特殊情况
return res;
}
private:
static bool strcmp(string &s1,string &s2)
{
return s1+s2>s2+s1;
}
string tostring(int n)
{//考虑0的时候
string res;
if(n==0) return "0";
for(;n!=0;n/=10){
char tmp=n%10+'0';
res+=tmp;
}
for(int i=0;i<res.size()/2;i++)
{
char tmp=res[i];
res[i]=res[res.size()-1-i];
res[res.size()-1-i]=tmp;
}
return res;
}
};