把数组排成最小的数:最直观的想法是,重载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; }