题目链接: leetcode
题目实质是排序规则的设计:
设
nums
任意两数字m,n的字符串格式为 x 和 y ,则
若拼接字符串 x + y > y + x,则 m > n
反之,若 x + y < y + x,则 n < m
传递性证明:
若字符串 x+y < y+x , y+z < z+y ,需证明 x+z < z+x 一定成立。
见题解
/*
执行用时:8 ms, 在所有 C++ 提交中击败了82.96%的用户
内存消耗:11.2 MB, 在所有 C++ 提交中击败了55.71%的用户
*/
class Solution {
public:
string minNumber(vector<int>& nums) {
vector<string> str;
for(auto num : nums)
{
str.push_back(to_string(num));
}
//修改内置函数的排序规则
sort(str.begin(), str.end(), [&](string x, string y){
if(x + y < y + x) return true;
return false;
});
string ans;
for(auto s : str)
{
ans += s;
}
return ans;
}
};
或者定义静态排序方法:
class Solution {
public:
string minNumber(vector<int>& nums) {
vector<string> strs;
string res;
for(auto num:nums) strs.push_back(to_string(num));
sort(strs.begin(),strs.end(),cmp);//需调用静态方法
for(auto str:strs) res+=str;
return res;
}
static bool cmp(const string&a,const string&b){return a+b<b+a;}
};
/*
作者:moao
链接:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/solution/cpp-onlognzi-ding-yi-pai-xu-by-moao-fjqp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*/