⬆︎
×

[PAT-A] 1038 Recover the Smallest Number

Hyplus目录

Java

测试点6超时,其他随机超时

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            list.add(scanner.next());
        }

        list.sort((o1, o2) -> (o1 + o2).compareTo(o2 + o1));
        StringBuilder sb = new StringBuilder();
        for (String str : list) {
            sb.append(str);
        }

        int cnt = 0;
        while (cnt < sb.length() && sb.charAt(cnt) == '0') {
            cnt++;
        }
        if (cnt == sb.length()) {
            System.out.println("0");
        } else {
            for (; cnt < sb.length(); cnt++) {
                System.out.print(sb.charAt(cnt));//去除前面的0
            }
        }
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 10010;

int n;
string s[N];

bool cmp(string a, string b) {
    return a + b < b + a;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; ++i) cin >> s[i];

    sort(s, s + n, cmp);

    string res;
    for (int i = 0; i < n; ++i) res += s[i];

    while (res[0] == '0') res = res.substr(1);
    if (res.empty()) res = "0";
    cout << res << endl;

    return 0;
}

发表评论