¿Algoritmo más rápido para verificar si un número es pandigital?
El número pandigital es un número que contiene los dígitos 1..número de longitud.
Por ejemplo 123, 4312 y 967412385.
He resuelto muchos problemas del Proyecto Euler, pero los problemas de Pandigital siempre superan la regla de un minuto.
Esta es mi función 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();
}
Crea tu propia función y pruébala con este método
int pans=0;
for (int i=123456789;i<=123987654;i++){
if (isPandigital(i)){
pans++;
}
}
Usando este ciclo, deberías obtener 720 números pandigitales. Mi tiempo promedio fue de 500 milisegundos.
Estoy usando Java, pero la pregunta está abierta a cualquier idioma.
ACTUALIZAR
La respuesta de @andras ha tenido el mejor momento hasta ahora, pero la respuesta de @Sani Huttunen me inspiró a agregar un nuevo algoritmo, que tiene casi el mismo tiempo que @andras.