把数组排成最小的数
来源:互联网 发布:手机知乎怎么查看问题 编辑:程序博客网 时间:2024/06/05 18:03
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321}, 则打印出这3个数字能排成的最小数字321323.
思路:
将数组中的每个数字按照某种规则排序,排序之后得到的序列就是这个数组所能排成的最小数字。
需要自定义一个排序的规则,也即就是重写自定义一个compare函数或者仿函数。
排序的规则:
给定两个整数,先将他们转换为字符串之后再分别以不同的顺序将它们组合得到两个组合字符串,使用strcmp函数比较这两个字符串。
class compare{public: bool operator()( int number1, int number2 ) { char *strNumber1 = new char[10]; char *strNumber2 = new char[10]; char *g_strCombine1 = new char[10*2+1]; char *g_strCombine2 = new char[10*2+1]; sprintf( strNumber1, "%d", number1 ); sprintf( strNumber2, "%d", number2 ); strcpy( g_strCombine1, strNumber1 ); strcat( g_strCombine1, strNumber2 ); strcpy( g_strCombine2, strNumber2 ); strcat( g_strCombine2, strNumber1 ); int isBigger = strcmp( g_strCombine1, g_strCombine2 ); delete strNumber1; delete strNumber2; delete g_strCombine1; delete g_strCombine2; if ( isBigger <= 0 ) return false; else return true; }};class Solution{public: string PrintMinNumber( vector<int> numbers ) { if ( numbers.empty() ) return string(); char result[numbers.size()*10]; memset( result, 0, numbers.size()*10 ); sort( numbers.begin(), numbers.end(), compare() ); for ( int i = 0; i < numbers.size(); i++ ) { char temp[10]; sprintf( temp, "%d", numbers[i] ); strcat( result, temp ); } return string( result ); }};int main( void ){ Solution sos; vector<int> numbers = { 10, 89, 5, 10, 55, 99 }; string result = sos.PrintMinNumber( numbers ); cout << result << endl; return 0;}
阅读全文
0 0
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数--总结
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 原生JS+Canvas实现五子棋游戏实例
- Qt之程序最小化托盘显示及操作
- leetcode--Combinations
- linux命令nl
- 前端虚拟接口---mock的用法
- 把数组排成最小的数
- 模线性方程组
- WNetAddConnection2 error 1219
- 求二叉树的最大深度
- 关闭当前窗口的方法
- uva-536,从先序中序得出后序
- redis客户端管理之读取xml配置,获取redis链接
- 查看keystore签名信息
- 四大开源协议比较:BSD、Apache、GPL、LGPL