【剑指offer】把数组排成最小的数
原创博文,转载请注明出处!
本题牛客网地址
# 题目
# 思路
1.排序
寻找数组元素排序规则,使得数组根据这个规则排序之后,数组元素能排成一个最小的数。排序规则如下:
- 若ab > ba, 则 a 大于 b,
- 若ab < ba ,则 a 小于 b,
- 若ab = ba ,则 a 等于 b;
2.拼接
给出数字m和n,怎么得到数字mn和nm并比较两者大小?如果使用数字计算,容易出现拼接后数字超过int能表达的范围。《剑指offer》中解决办法是把数字转换成字符串,使用字符串表示拼接后的数字,并比较拼接后数字的大小。
# 代码
1 class Solution { 2 public: 3 string PrintMinNumber(vector<int> numbers) 4 { 5 string res; 6 if(numbers.size() == 0) return ""; 7 8 // 排序 9 sort(numbers.begin(), numbers.end(), cmp); 10 11 // 拼接 12 for(int i = 0; i < numbers.size(); ++i) 13 res += to_string(numbers[i]); 14 15 return res; 16 } 17 private: 18 // 升序排序 19 static bool cmp(int a, int b){ 20 string A = to_string(a) + to_string(b); 21 string B = to_string(b) + to_string(a); 22 return A < B; 23 } 24 };