首页 > 代码库 > 32、剑指offer--把数组排成最小的数

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 };

 

32、剑指offer--把数组排成最小的数