把数组排成最小的数

题目描述

  输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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 };

 

posted @ 2017-12-28 15:37  jeysin  阅读(128)  评论(0编辑  收藏  举报