Java ( 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̷̰̀ĥ̷̳):
ใช้สำหรับลูปเพื่อบันทึกตัวอักษรสองสามตัวและใช้ 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 บิตทั้งหมด