题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
拿到题目的第一思路,暴力,先想了前期思路:
首位不同,先比首位,小的在前,
首位同,
再比第二位,小的在前
有第二位的比,没有的排除
第二位又同,再第三
小的在前, 321 32 3
位数同,再比第二位,小的在前
但是这个思路是错的,适用性差,只适合位数少的,位数一高就麻烦
解决障碍:
C++中整型转字符串to_string()不会
sort( , ,cmp())中的cmp()函数使用不熟练,只能进行简单的排序
两个string字符串都只含数字是可以直接计算的
正确思路:
将整型转为字符串数组,通过sort()函数,cmp()函数返回相加后小的那个结果,最后将所得的最小排列的字符串数组拼接成一个字符串返回。
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
vector<string> str;
for(int num : numbers)
str.push_back(to_string(num));
sort(str.begin(), str.end(),[](string a,string b){
return a+b<b+a;
});
string arr = "";
for(string s:str)
arr+=s;
return arr;
}
};