1、题目
2、思路
1.排序
寻找数组元素排序规则,使得数组根据这个规则排序之后,数组元素能排成一个最小的数。排序规则如下:
若ab > ba, 则 a 大于 b,
若ab < ba ,则 a 小于 b,
若ab = ba ,则 a 等于 b;
2.拼接
给出数字m和n,怎么得到数字mn和nm并比较两者大小?如果使用数字计算,容易出现拼接后数字超过int能表达的范围。《剑指offer》中解决办法是把数字转换成字符串,使用字符串表示拼接后的数字,并比较拼接后数字的大小。
class Solution {
public:
string PrintMinNumber(vector<int> numbers)
{
string res;
if(numbers.size() == 0) return "";
// 排序
sort(numbers.begin(), numbers.end(), cmp);
// 拼接
for(int i = 0; i <numbers.size(); ++i)
res += to_string(numbers[i]);
return res;
}
private:
// 升序排序
static bool cmp(int a, int b){
string A = to_string(a) + to_string(b);
string B = to_string(b) + to_string(a);
return A < B;
}
};