把数组排成最小的数:最直观的想法是,重载sort函数的cmp函数,注意,其中的cmp函数是静态的,因为static函数与具体的对象无关,其可以被全局调用。排序即按照一定顺序排列元素,该顺序可以是递增的,也可以是递减的,甚至可以是自定义的。由于返回的结果要求是字符串,故先将数字数组转换为字符串数组,然后对字符串数组按照自定义顺序cmp进行排序,接着将排序后的字符串数组元素拼接成字符串,其中cmp是字符串拼接比较函数,即字符串s1和s2,其要求s1+s2小于s2+s1的,其中字符串比较是按照字典顺序比较的。

static bool cmp(string &s1,string &s2)
{
    return (s1+s2)<(s2+s1);
}
string PrintMinNumber(vector<int> numbers) 
{
    //空数组特判
    if(numbers.size()==0)
       return "";
    vector<string> res;
    //先将数字数组转换成字符串数组
    for(auto number:numbers)
       res.push_back(to_string(number));
    //重载sort排序比较函数
    sort(res.begin(),res.end(),cmp);
    //结果字符串
    string ans;
    //拼接字符串
    for(auto str:res)
       ans+=str;
    return ans;
}