把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:自定义排序规则,将数组排好序之后顺序输出就是结果
1 class Solution { 2 public: 3 class Compare 4 { 5 public: 6 bool operator()(int a, int b) 7 { 8 memset(buf1, 0, sizeof(buf1)); 9 memset(buf2, 0, sizeof(buf2)); 10 sprintf(buf1, "%d", a); 11 sprintf(buf2, "%d", b); 12 string str1=buf1; 13 string str2=buf2; 14 str1=str1+buf2; 15 str2=str2+buf1; 16 return str1<str2; 17 } 18 private: 19 char buf1[20]; 20 char buf2[20]; 21 }; 22 string PrintMinNumber(vector<int> numbers) { 23 string res; 24 if(numbers.size()==0)return res; 25 std::sort(numbers.begin(), numbers.end(), Compare()); 26 char buf[1000]; 27 memset(buf, 0, sizeof(buf)); 28 int begin=0; 29 int ret; 30 for(size_t idx=0; idx<numbers.size(); ++idx) 31 { 32 ret=sprintf(buf+begin, "%d", numbers[idx]); 33 begin=begin+ret; 34 } 35 res=buf; 36 return res; 37 } 38 };