题意:给出一堆的数字字符串,问把这些字符串连接起来能组成的最大数字是多少。
题解:排序,第一位字母按字典序降序,第一位字母相同的s1和s2,那就比较s1+s2 和 s2 + s1的大小来降序排列,然后按排好序的顺序连起来就是最大的数字。注意前导0的问题。
class Solution {
public:
static bool cmp(int a,int b)
{
string s1 = to_string(a);
string s2 = to_string(b);
if(s1[0] == s2[0])
{
string ss1 = s1 + s2;
string ss2 = s2 + s1;
return atoll(ss1.c_str()) > atoll(ss2.c_str());
}
else return s1[0] > s2[0];
}
string largestNumber(vector<int>& nums) {
sort(nums.begin(),nums.end(),cmp);
string ans = "";
for(int i = 0; i < nums.size(); i++)
ans += to_string(nums[i]);
string anss = "";
for(int i = 0; i < ans.length(); i++)
{
if(ans[i] != '0')
{
anss = ans.substr(i);
break;
}
}
if(anss == "") anss = "0";
return anss;
}
};