Pandigital number - номер, который содержит цифры 1..number length.
Например, 123, 4312 и 967412385.
Я решил много проблем Project Euler, но проблемы с Pandigital всегда превышают одноминутное правило.
Это моя функция pandigital:
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();
}
Создайте свою собственную функцию и протестируйте ее с помощью этого метода
int pans=0;
for (int i=123456789;i<=123987654;i++){
if (isPandigital(i)){
pans++;
}
}
Используя этот цикл, вы должны получить 720 pandigital номеров. Мое среднее время составляло 500 миллисекунд.
Я использую Java, но вопрос открыт для любого языка.
UPDATE
У ответа @andras есть лучшее время, но ответ @Sani Huttunen вдохновил меня добавить новый алгоритм, который почти в то же время, что и @andras.