面试题33:把数组排成最小的数
来源:互联网 发布:格力壁挂空调 r32知乎 编辑:程序博客网 时间:2024/06/06 03:51
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
这题不会,看书上的思想做的。
思想是:找到一个排序规则,使得根据这个排序规则能排成一个最小的数。考虑m,和n,考虑mn到还是nm大,就可以确定排序规则了。但是考虑到位数多的话涉及到大数问题。考虑将数字转换成字符串再做。再考虑1,3,2,可能排的时候先排成13,再排2,就排成了132,这都是最小的了。因此排序前要先排序,排成1,2,3.再按上述规则排列。书上对于这种做法的可行性有严格的证明。在此不多述。
代码如下:
class Solution {public: string PrintMinNumber(vector<int> numbers) { int i; string str=""; sort(numbers.begin(),numbers.end()); for(i=0;i<numbers.size();i++) { connect(str,numbers[i]); } return str; } void connect(string &str,int num) { stringstream ss; ss<<num; string str1; str1=ss.str(); if(bigger(str,str1)) str=str+str1; else str=str1+str; } bool bigger(const string& str,const string& str1) { bool sign=true; string s1=str+str1; string s2=str1+str; int i; for(i=0;i<s1.size();i++) { if(s1[i]<s2[i]) break; else if(s1[i]>s2[i]) { sign=false; break; } else ; } return sign; }};
0 0
- 面试题33:把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33 把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33_把数组排成最小的数
- 面试题33把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33—把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题 33: 把数组排成最小的数
- 剑指Offer面试题33把数组排成最小的数,面试题34丑数
- 【百度面试题】把数组排成最小的数
- 面试题37:把数组排成最小的数
- [面试题11]把数组排成最小的数
- 【百度面试题】把数组排成最小的数
- 《PCL点云库学习&VS2010(X64)》Part 15 PCL1.72(VTK6.2.0)三角网格化(2)之泊松重构
- TCP/IP,http,socket,长连接,短连接——小结。
- 最小的k个数
- HTML5基础学习笔记(八)
- 初学ML笔记NO.5——关于熵
- 面试题33:把数组排成最小的数
- fork 之 父子进程
- PHP AOP 面向切面
- easyui.utils.js 自己封装的 使用easyui过程中方便操作和取值(一)
- 快速阅读
- 4Sum
- VMware使用共享文件夹
- hdu 5645(取球&&概率)
- linux 根据进程名查看其占用的端口