关键词:排序
最后组成的总位数保持不变;
贪心,把数字大的放在前面
出现 5,6,63怎么办,6 优先于63排列,6 69呢 ,这相当于拼接比较了,6+63,和63+6比大小
如果算出来全是0,结果就是0,不要返回0…0
比较那里不要写>=,写>的话可以利用传递性
时间复杂度分析:
排序nlogn; 数字最大为m,长度为logm,拼接复杂度 O(logm),总共nlognlogm
class Solution {
public:
string largestNumber(vector<int>& nums) {
sort(nums.begin(),nums.end(),
[](const auto& u,const auto& v){
return (to_string(u)+to_string(v)) > (to_string(v)+to_string(u));
}
);
if (nums[0] == 0)//以0开头,程序无误则后面都是0
return "0";
string res = "";
for(int& i:nums){
res+=to_string(i);
}
return res;
}
};