解法一:字符串比较
最优解不是纯粹的字典序,要将两个字符串的前后两种连接方式进行比较来决定谁排在前面。
注意全部为0的情况。
#include <bits/stdc++.h>
using namespace std;
vector<string> nums;
bool flag = false;
bool cmp(string o1, string o2) {
return o1 + o2 < o2 + o1;
}
void print(string &str) {
int i;
for (i = 0; i < str.size(); ++i) {
if (str[i] != '0') {
break;
}
}
for (; i < str.size(); ++i) {
cout << str[i];
flag = true;
}
}
int main() {
int N;
cin >> N;
string num;
for (int i = 0; i < N; ++i) {
cin >> num;
nums.emplace_back(num);
}
sort(nums.begin(), nums.end(), cmp);
for (auto &it:nums) {
if (!flag) {
print(it);
} else {
cout << it;
}
}
if (!flag) {
cout << "0\n";
} else {
cout << '\n';
}
}