2021年01月09日 周六 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
1. 题目简介
2. 自定义排序
2.1 解题思路
以下解题思路来自大佬 Krahets,十分感谢。
2.2 代码
class Solution {
public:
string minNumber(vector<int>& nums) {
vector<string> strs;
string res;
for(int num:nums)
strs.emplace_back(to_string(num));
sort(strs.begin(),strs.end(),[](string& s1, string& s2){
return s1 + s2 < s2 + s1;
});
for(string s:strs)
res += s;
return res;
}
};
代码其实很简单,但是这道题的关键不在于代码,而在于证明,证明这种排序规则是有效的(证明1),排序后得到的结果是正确的(证明2),证明才是这道题的关键所在。
这里给出剑指offer上的证明:
参考文献
《剑指offer 第二版》
https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/solution/mian-shi-ti-45-ba-shu-zu-pai-cheng-zui-xiao-de-s-4/