자바 ( 131 59 57)
57 자 :
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ 제안한대로 ^ 및 $를 제거했습니다.
boolean u(int n){return !(n+"").matches(".*(.).*\\1.*");}
59 자 (음수와 함께 사용 가능) :
boolean u(int n){return !(n+"").matches("^.*(.).*\\1.*$");}
79 78 자 (감사 @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳) :
for 루프를 사용하여 몇 개의 문자를 저장하고 int를 부울 배열로 사용하십시오.
1 문자를 저장하려면 && 대신 &를 사용하십시오 (Java에서 허용 함).
boolean u(int n){for(int x=0;n>0&(x>>n%10&1)==0;n/=10)x|=1<<n%10;return n==0;}
131 자 (음수의 경우 참) :
boolean u(int n){int[] p=new int[]{2,3,5,7,11,13,17,19,32,29};double a=9001312320D;while(n>0){a/=p[n%10];n/=10;}return (long)a==a;}
의견 :
boolean unique(int n){
int[] p=new int[]{2,3,5,7,11,13,17,19,32,29};//list of 10 first primes
double a=9001312320D;//10 first primes multiplied
while(n>0){
a/=p[n%10];//divide by (n%10+1)th prime
n/=10;//divide n by 10, next digit
}
return (long)a==a;//if a is integer then n has all digits unique
}
그리고 기술적으로 올바른 대답 (문자 수에는 전역 변수가 아닌 함수 만 포함)이지만 부정 행위라고 생각합니다 .29 자 :
boolean u(int i){return m[i];}
m []은 모든 32 비트 정수에 대한 정답을 포함하는 부울 배열입니다.