输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
class Solution {
public:
//to_string时<string>中的一函数,将数值转化为字符
//sort(a.begin(),a.end(),cmp)默认为从小到大排序,现在重新定义方法,
//数值可直接greater() 递减, less() 递增(省略)
//比较数组元素a+b和b+a的大小,若a+b和>b+a,就将a放在前面
//边界条件
//非静态成员函数指针和普通函数指针是有区别的。静态成员函数指针和普通函数指针没有区别
static bool cmp(int a,int b)
{
string A=to_string(a)+to_string(b);
string B=to_string(b)+to_string(a);
if (A<B) return true;
else return false;
}
string PrintMinNumber(vector<int> numbers) {
if(numbers.empty()) return "";//不要空格
if(numbers.size()==1) return to_string(numbers[0]);
string result;
sort(numbers.begin(),numbers.end(),cmp);
for(auto x:numbers)
{
result+=to_string(x);
}
return result;
}
};