Schnellster Algorithmus, um zu überprüfen, ob eine Nummer pandigital ist?

Pandigital Zahl ist eine Zahl, die enthält die Ziffern von 1..Anzahl Länge.

Zum Beispiel 123, 4312 und 967412385.

Habe ich gelöst, viele Projekt Euler Probleme, aber die Pandigital Probleme immer über den ein-Minuten-Regel.

Dies ist mein pandigital Funktion:

private boolean isPandigital(int n){
    Set<Character> set= new TreeSet<Character>();   
    String string = n+"";
    for (char c:string.toCharArray()){
        if (c=='0') return false;
        set.add(c);
    }
    return set.size()==string.length();
}

Ihre eigene Funktion erstellen und testen Sie es mit dieser Methode

int pans=0;
for (int i=123456789;i<=123987654;i++){
    if (isPandigital(i)){
         pans++;
    }
}

Mithilfe dieser Schleife, Sie sollten 720 pandigital zahlen. Meine Durchschnittliche Zeit war 500 Millisekunden.

Ich bin mit Java, aber die Frage ist, offen für jede Sprache.

UPDATE

@andras Antwort hat die beste Zeit bisher, aber @Sani Huttunen Antwort, die mich inspiriert hinzufügen eines neuen Algorithmus, der bekommt fast die gleiche Zeit wie @andras.

Kommentar zu dem Problem - Öffnen
Vielleicht suchen Sie es der falsche Weg. Nicht sicher, was das problem Sie sind suchen an, aber ich bin mir ziemlich sicher, dass die Lösung etwas cleverer als die brute-forcing nur durch Durchlaufen der zahlen und die Prüfung, ob eine Zahl ist pandigital. Auch nicht, es werden jede Ziffer genau einmal vorkommt? Es ist auch ein Mathematik related site, nicht nur zu Programmieren... Kommentarautor:
std::next_permutation? Kommentarautor: kennytm
Warum finden Sie, wenn Sie können machen Sie? 😉 Kommentarautor: Pratik Deoghare
@Psytronic, ich glaube, ich wollte von Project Euler ist die definition selbst, aber nicht so sicher... Kommentarautor:
Alle Lösungen basieren, zur Berechnung von Summe und Produkt der Ziffern sind incorreect. Zum Beispiel, Sie akzeptieren 124445799 als pandigital, da die Summe der Ziffern ist 45 und das Produkt ist 362880. Im moment gibt es mindestens 3 falsche Lösungen. Daher würde ich vorschlagen, um das Intervall zu ändern von Ihr testen. Kommentarautor: Accipitridae

InformationsquelleAutor der Frage medopal | 2010-03-20

Schreibe einen Kommentar