剑指Offer_面试题33_把数组排成最小的数
2017-08-17 21:05
169 查看
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{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; //"升序" } };
总结:如果用全排列比较选取最小的,这种办法效率太低。看透本质是关键。
相关文章推荐
- 剑指Offer面试题33(java版):把数组排成最小的数
- 剑指offer面试题33:把数组排成最小的数
- 剑指offer-面试题33-把数组排成最小的数
- 剑指Offer面试题33:把数组排成最小的数 Java 实现,三种方法
- 面试题33:把数组排成最小的数--《剑指offer》
- 剑指Offer:面试题33——把数组排成最小的数(java实现)(未完待续)
- 剑指offer——面试题33:把数组排成最小的数
- 剑指Offer系列-面试题33:把数组排成最小的数
- (剑指Offer)面试题33:把数组排成最小的数
- 《剑指Offer》学习笔记--面试题33:把数组排成最小的数
- 剑指Offer面试题33把数组排成最小的数,面试题34丑数
- 【剑指Offer学习】【面试题33:把数组排成最小的数】
- 剑指Offer面试题11:旋转数组的最小数字
- 剑指offer-面试题33:把数组排成最小的数
- 剑指offer面试题33:把数组排成最小的数
- 剑指offer 面试题33—把数组排成最小的数
- 剑指Offer:面试题33 把数组排成最小的数
- 剑指Offer(第二版)面试题45:把数组排成最小的数
- 《剑指offer》面试题8—旋转数组的最小数字
- 剑指Offer面试题:7.旋转数组的最小数字