面试题33_把数组排成最小的数
2015-07-30 23:04
453 查看
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路
这道题是一个排序问题,但是要自定义排序规则。需要注意的问题是:拼接起来的数可能超出整型数的表示范围,因此这也是一个大数问题。
用字符串来表示解决溢出问题。
实现代码
<span style="font-size:18px;"> class Solution { public: string PrintMinNumber(vector<int> numbers) { string ret; ret.clear(); if(numbers.empty()) return ret; string numToStr; int len = numbers.size(); vector<string> vStr; for(int i=0; i< len ;i++) { stringstream sst;//定义string流对象 sst<<numbers[i];//这里注意 流写入符号 "<<" 也就是标准输出符号,在这里是用来向 //流对象写入数据 vStr.push_back(sst.str()); } sort(vStr.begin(), vStr.end(),compare); for(int i=0; i<len; i++) ret.append(vStr[i]); return ret; } static bool compare(const string &str1, const string &str2) { return (str1+str2) < (str2+str1);//注意小于号,代表从小到大排序,大于号则相反 } }; </span>
相关文章推荐
- PHP程序员的职业规划,走进PHP后端工程师的世界
- 黑马程序员_Java基础:可变参数(Varagrs)的使用注意事项
- 网易面试总结
- 黑马程序员------面向对象
- 工作了大半年是否该继续程序员之路
- 黑马程序员——Java基础---反射
- 黑马程序员——java学习8(166-179)——集合,Collection,List
- 黑马程序员——交通灯系统
- 黑马程序员——Java学习总结:反射
- 黑马程序员——泛型(Generic)的理解和使用
- 黑马程序员——Java学习总结:转换流和流的操作总结
- (面试题23)从上打印二叉树
- 黑马程序员——Java学习总结:IO常用方法练习
- (剑指Offer)面试题48:不能被继承的类
- 黑马程序员——IO总结
- 黑马程序员——集合总结
- 【剑指Offer面试题】 九度OJ1520:树的子结构
- 一个弱菜的面试经历(美团网,cvte,腾讯)
- 【问与答】开复老师:硕士毕业后工作,还是出国读博?
- 嵌入式软件开发——CVTE 面试+笔试题