解法一:字符串比较
最优解不是纯粹的字典序,要将两个字符串的前后两种连接方式进行比较来决定谁排在前面。
注意全部为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';}}
