把数组排成最小的数
C++,排序,cmp自定义排序规则。
这道题很有意思,其实和PAT甲级的一道题差不多。
首先把整数数组转化成字符串数组,然后在数组里对所有字符串进行排序。
排序的规则是:相邻两元素组成的数字要达到最小。
也就是说比较数组[a, b]中是否a + b < b + a,满足这个规则,整个数组连成的字符串就能达到最小。
class Solution {
public:
static bool cmp(string a, string b) {
if (a + b < b + a)
return true;
else return false;
}
string PrintMinNumber(vector<int> numbers) {
vector<string> ss;
char num[10];
string ans;
for (int &it : numbers) {
sprintf(num, "%d", it);
ss.push_back(string(num));
}
sort(ss.begin(), ss.end(), cmp);
for (string &it : ss)
ans += it;
return ans;
}
};