码迷,mamicode.com
首页 > 其他好文 > 详细

把数组排成最小的数

时间:2014-07-02 20:41:40      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   art   问题   

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

分析:这里一个需要注意的是,组成的数有可能溢出,所以这是一个大数问题。对于大数问题,我们又想到不能直接这么组成一个数字,可以采用字符串,也就是先转换成字符串,再进行比较,strcmp()。

        还有个问题就是,我们不采用全排列组合,我们可以对字符进行一个排序。

代码如下:

//重新定义比较函数对象
struct compare
{
    bool operator() (const string &src1, const string &src2)
    {
        string s1 = src1 + src2;
        string s2 = src2 + src1;
        return s1 < s2;   //升序排列,如果改为s1 > s2则为逆序排列
    }
};
//函数功能 : 把数组排成最小的数
//函数参数 : pArray为数组,num为数组元素个数  
//返回值 :   无
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;
}

参考:http://blog.csdn.net/wuzhekai1985/article/details/6704902

把数组排成最小的数,布布扣,bubuko.com

把数组排成最小的数

标签:style   blog   http   color   art   问题   

原文地址:http://www.cnblogs.com/menghuizuotian/p/3819311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!