--------------------------------------------二刷2021/1/25----------------------------
为什么这样能得得知哪一位数字要放哪呢。
设三个数字 n m k 求最大拼接的最大数字
我们经过比较 n和m n和k发现nm > mn 且 nk>kn,就能说明n放最高位肯定比其他两位放最高位好,以此类推,一一比较之后就能得到拼接的最大数字。
---------------------------------------------一刷------------------------------------------
题目描述
解法 排序
class Solution {
public:
string minNumber(vector<int>& nums) {
if(nums.size() == 1) return to_string(nums[0]);
vector <string> s;
string ans;
for(int num : nums) {
s.push_back(to_string(num));
}
sort(s.begin(), s.end(), compare);
for(string ss : s) ans += ss;
return ans;
}
static bool compare(string a, string b) {
string s1 = a + b;
string s2 = b + a;
return s1 < s2;
}
};
时间复杂度O(NlogN)
空间复杂度O(N)
自定义sort函数的比较函数时,要加关键字static
sort(排序的首地址, 排序的末地址 + 1, 比较器函数名称);
关于比较器函数,含义是 当return true时,认为第一个参数的值小于第二个参数。当return false时,认为第一个参数的值大于第二个参数。并且当相同的时候一定要返回false
ps:要记得加static
或者可以重载比较运算符(留坑)