首页 > 代码库 > 把数组排成最小的数
把数组排成最小的数
题目:输入一个正整数数组,把数组里面所有数字拼接起来排成一个数,打印能拼接出的所有数字钟最小的一个。例如:输入数组{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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。