思路
- 自定义排序,自定义排序规则的合理性可以使用“全序关系”来证明(离散数学知识点)
- 0的问题,除去相同元素0,见代码
代码
class Solution {
public:
// 我们自定义一种排序规则
// 该规则是否可以用来进行排序?使用“全序关系”进行证明后,满足3个条件,可用
// 1.反对称性:如果 a ≤ b 且 b ≤ a 则 a = b (易证)
// 2.传递性:如果 a ≤ b 且 b ≤ c 则 a ≤ c(有点复杂,略)
// 3.完整性:a ≤ b 或 b ≤ a(任意2个元素是可以比较的 - 易证)
static bool cmp(const string &s1, const string &s2) {
return s1 + s2 > s2 + s1;
}
string largestNumber(vector<int>& nums) {
int n = nums.size();
vector<string> ns(n);
for (int i = 0; i < n; i ++ ) ns[i] = to_string(nums[i]);
sort(ns.begin(), ns.end(), cmp);
string ans = "";
for (int i = 0; i < n; i ++ ) ans += ns[i];
if (ans[0] == '0') return "0";
return ans;
}
};