Java 8、132 110 87 74バイト
n->{int c=0;for(;(n+"").chars().distinct().count()!=10;n*=2)c++;return c;}
@OlivierGrégoireに感謝-57バイト。
説明:
ここで試してみてください。(注:2
2 68で停止する必要があるため、テストケースは無効になっていますが、サイズはlong
2 63 -1に制限されています。)
n-> // Method with long parameter and integer return-type
int c=0; // Count-integer, starting at 0
for(;(n+"").chars().distinct().count()!=10;
// Loop (1) as long as the unique amount of digits in the number are not 10
n*=2) // After every iteration: multiply the input by 2
c++; // Increase the count by 1
// End of loop (1) (implicit / single-line body)
return c; // Return the counter
} // End of method
入力と正規表現を使用した古い132バイトの回答String
:
n->f(n,0)int f(String n,int c){String t="";for(int i=0;i<10;t+="(?=.*"+i+++")");return n.matches(t+".*")?c:f(new Long(n)*2+"",c+1);}
ここで試してみてください。(注:のテストケース2
わずかな再帰が原因でStackOverflowExceptionが発生するためは無効になっています。)
文字列に9桁すべてが含まれているかどうかを確認する正規表現の合計^(?=.*0)(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)(?=.*6)(?=.*7)(?=.*8)(?=.*9).*$
は、文字列全体に対して正の先読みを使用します。