剑指Offer_面试题33_把数组排成最小的数
来源:互联网 发布:客户管理系统源码 编辑:程序博客网 时间:2024/06/01 10:05
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
分析:本质上其实是一种排序思想。数组中的两个元素m,n, 如果mn > nm 那么就认定m > n, 只要按照这个规则进行升序排序,然后将排序后的数组元素按顺序组合即可。相当于一个元素“小”,那么他尽量排在高位,这样保证组合起来的值尽可能小,于是可以排序,然后组合。
代码:
class Solution {public: string PrintMinNumber(vector<int> numbers) { string result = "";if (!numbers.empty()){vector<string> strNum;for (auto num : numbers){strNum.push_back(to_string(num));}sort(strNum.begin(), strNum.end(), compare);for (string s : strNum)result.append(s);}return result; } static bool compare(string a, string b){string numA = a + b;string numB = b + a;return numA < numB; //"升序"}};
总结:如果用全排列比较选取最小的,这种办法效率太低。看透本质是关键。
阅读全文
0 0
- 剑指Offer_面试题33_把数组排成最小的数
- 面试题33_把数组排成最小的数
- 剑指offer_数组---把数组排成最小的数
- 剑指offer_把数组排成最小的数
- 剑指Offer面试题33把数组排成最小的数,面试题34丑数
- 面试题33:把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33 把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题33—把数组排成最小的数
- 面试题33:把数组排成最小的数
- 面试题 33: 把数组排成最小的数
- 【剑指offer】面试题33:把数组排成最小数
- 2017.8.17IO流 的案列
- 【后台】菜单管理界面菜单项增加自定义字段
- Struts2 方法动态调用,验证表签,xml配置Action
- hdu 6140
- 51 nod 1435 位数阶乘
- 剑指Offer_面试题33_把数组排成最小的数
- Android Binder机制浅析(一)
- 8.17--练习赛B题--River Hopscotch(二分)
- ARM学习笔记三
- IO流
- Python3爬虫代理服务器与cookie的使用
- 几种web服务器端推送技术的简单介绍
- 半平面交
- SQL的多表查询和子查询