算法1
这样写能通过测试用例,通不过[111311, 1113]
class Solution {
public:
static bool cmp(string a, string b){
int n = a.size();
int m = b.size();
// if(n == m){
// return a > b;
// }else if(n < m){
// return a.substr(0, n) > b.substr(0, n);
// }else{
// return a.substr(0, m) > b.substr(0, m);
// }
if(n < m){
a.insert(n, m-n,'0');
}else{
b.insert(m, n-m,'0');
}
return a > b;
}
string largestNumber(vector<int>& nums) {
vector<string> strings;
string ans = "";
//sort(nums.begin(), nums.end());
for(auto num : nums){
strings.push_back(to_string(num));
//printf("%s ", to_string(num).c_str());
}
sort(strings.begin(), strings.end(), cmp);
for(auto s:strings){
//printf("%s ", s.c_str());
ans = ans + s;
}
//printf("\n");
return ans;
}
};
算法2
能通过上一种通不过的,但不通过[0,0]。
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> strings;
string ans = "";
for(auto num : nums){
strings.push_back(to_string(num));
}
sort(strings.begin(), strings.end(), [](string a, string b){
return a + b > b + a;
});
for(auto s:strings){
ans = ans + s;
}
return ans;
}
};
算法3
AC
添加了 if (strings[0] == “0”) return “0”; // 检查前导0的特殊情况
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> strings;
string ans = "";
for(auto num : nums){
strings.push_back(to_string(num));
}
//注意这里自定义排序规则,比较的方法涉及到离散数学的全序关系。
sort(strings.begin(), strings.end(), [](string a, string b){
return a + b > b + a;
});
if (strings[0] == "0") return "0"; // 检查前导0的特殊情况
for(auto s:strings){
ans = ans + s;
}
return ans;
}
};