32、剑指offer--把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:本题比较mn 和 nm,哪个小就怎么排
1)首先将每一个数字以字符串的形式拷入strName中
2)对其调用排序。排序按我们设计的compare规则比较
3)将排好序的数组存入结果中,返回结果
1 bool compare(const string &st1,const string &st2) 2 { 3 string s1 = st1 + st2; 4 string s2 = st2 + st1; 5 return s1 < s2; 6 } 7 class Solution { 8 public: 9 const int g_MaxNumberLength=10; 10 string PrintMinNumber(vector<int> numbers) { 11 string result; 12 int length = numbers.size(); 13 if(length <= 0) 14 return result; 15 char** strNumbers=new char*[length]; 16 for(int i=0;i<length;i++) 17 { 18 strNumbers[i]=new char[g_MaxNumberLength+1]; 19 sprintf(strNumbers[i],"%d",numbers[i]); 20 } 21 sort(strNumbers,strNumbers+length,compare); 22 for(int i=0;i<length;i++) 23 result.append(strNumbers[i]); 24 25 for(int i=0;i<length;i++) 26 delete[] strNumbers[i]; 27 delete[] strNumbers; 28 return result; 29 } 30 };