【刷题剑指offer】把数组排成最小的数

来源:互联网 发布:java中的io和nio 编辑:程序博客网 时间:2024/06/10 08:54

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.

思路:1、全排列后排序取出最小,复杂度太高了

2、利用String类,先将整数数组转为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可。这里注意的是字符串的比较函数需要重新定义,不是比较a和b,而是比较ab与 ba。如果ab < ba,则a < b;如果ab > ba,则a > b;如果ab = ba,则a = b。比较函数的定义是本解决方案的关键。

#include <iostream>  #include <string>  #include <sstream>  #include <algorithm>  using namespace std;    bool compare(const string& str1, const string &str2)  {      string s1=str1+str2;      string s2=str2+str1;      return s1<s2;  }    void ComArrayMin(int *pArray, int num)  {      int i;      string *pStrArray=new string[num];        for(i=0; i<num; i++)      {          stringstream stream;          stream<<pArray[i];          stream>>pStrArray[i];           }        sort(pStrArray, pStrArray+num, compare);        for(i=0; i<num; i++)          cout<<pStrArray[i];        cout<<endl;        delete[] pStrArray;    }  

阅读全文
0 0
原创粉丝点击