import java.util.*;
import java.lang.*;
class Main
{
private static void printAllStringsOfLength(int len) {
long start
= System.
nanoTime(); char[] guess = new char[len];
int totalGuesses = 0;
do {
//System.out.println("Current guess: " + new String(guess));
totalGuesses++;
int incrementIndex = guess.length - 1;
while (incrementIndex >= 0) {
guess[incrementIndex]++;
if (guess[incrementIndex] > 'z') {
if (incrementIndex > 0) {
guess[incrementIndex] = 'a';
}
incrementIndex--;
}
else {
break;
}
}
} while (guess[0] <= 'z');
long time
= System.
nanoTime() - start
; System.
out.
printf("printAllStringsOfLength() yook %.3f seconds to generate %,d combinations%n", time
/ 1e9, totalGuesses
); }
private static void alternatePrint(int len) {
long start
= System.
nanoTime(); int letters = 26;
int count = len;
int totalGuesses = 0;
StringBuilder sb = new StringBuilder(count);
int combinations
= (int) Math.
pow(letters, count
); for (int i = 0; i < combinations; i++) {
sb.setLength(0);
for (int j = 0, i2 = i; j < count; j++, i2 /= letters)
sb.insert(0, (char) ('a' + i2 % letters));
// System.out.println(sb);
totalGuesses++;
}
long time
= System.
nanoTime() - start
; System.
out.
printf("alternatePrint() took %.3f seconds to generate %,d combinations%n", time
/ 1e9, totalGuesses
); }
public static void main
(String[] args
) { printAllStringsOfLength(5);
alternatePrint(5);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CgpjbGFzcyBNYWluCnsKCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRBbGxTdHJpbmdzT2ZMZW5ndGgoaW50IGxlbikgewoJCWxvbmcgc3RhcnQgPSBTeXN0ZW0ubmFub1RpbWUoKTsKCSAgICBjaGFyW10gZ3Vlc3MgPSBuZXcgY2hhcltsZW5dOwoJICAgIEFycmF5cy5maWxsKGd1ZXNzLCAnYScpOwoJICAgIGludCB0b3RhbEd1ZXNzZXMgPSAwOwoKCSAgICBkbyB7CgkgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJDdXJyZW50IGd1ZXNzOiAgIiArIG5ldyBTdHJpbmcoZ3Vlc3MpKTsKCSAgICAJdG90YWxHdWVzc2VzKys7CgkgICAgICAgIGludCBpbmNyZW1lbnRJbmRleCA9IGd1ZXNzLmxlbmd0aCAtIDE7CgkgICAgICAgIHdoaWxlIChpbmNyZW1lbnRJbmRleCA+PSAwKSB7CgkgICAgICAgICAgICBndWVzc1tpbmNyZW1lbnRJbmRleF0rKzsKCSAgICAgICAgICAgIGlmIChndWVzc1tpbmNyZW1lbnRJbmRleF0gPiAneicpIHsKCSAgICAgICAgICAgICAgICBpZiAoaW5jcmVtZW50SW5kZXggPiAwKSB7CgkgICAgICAgICAgICAgICAgICAgIGd1ZXNzW2luY3JlbWVudEluZGV4XSA9ICdhJzsKCSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgaW5jcmVtZW50SW5kZXgtLTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGVsc2UgewoJICAgICAgICAgICAgICAgIGJyZWFrOwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgoJICAgIH0gd2hpbGUgKGd1ZXNzWzBdIDw9ICd6Jyk7CgkgICAgCgkgICAgbG9uZyB0aW1lID0gU3lzdGVtLm5hbm9UaW1lKCkgLSBzdGFydDsKCQlTeXN0ZW0ub3V0LnByaW50ZigicHJpbnRBbGxTdHJpbmdzT2ZMZW5ndGgoKSB5b29rICUuM2Ygc2Vjb25kcyB0byBnZW5lcmF0ZSAlLGQgY29tYmluYXRpb25zJW4iLCB0aW1lIC8gMWU5LCB0b3RhbEd1ZXNzZXMpOwoJfQoJCglwcml2YXRlIHN0YXRpYyB2b2lkIGFsdGVybmF0ZVByaW50KGludCBsZW4pIHsKCQlsb25nIHN0YXJ0ID0gU3lzdGVtLm5hbm9UaW1lKCk7CgkJaW50IGxldHRlcnMgPSAyNjsKCQlpbnQgY291bnQgPSBsZW47CgkJaW50IHRvdGFsR3Vlc3NlcyA9IDA7CgkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGNvdW50KTsKCQlpbnQgY29tYmluYXRpb25zID0gKGludCkgTWF0aC5wb3cobGV0dGVycywgY291bnQpOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tYmluYXRpb25zOyBpKyspIHsKCQkgICAgc2Iuc2V0TGVuZ3RoKDApOwoJCSAgICBmb3IgKGludCBqID0gMCwgaTIgPSBpOyBqIDwgY291bnQ7IGorKywgaTIgLz0gbGV0dGVycykKCQkgICAgICAgIHNiLmluc2VydCgwLCAoY2hhcikgKCdhJyArIGkyICUgbGV0dGVycykpOwoJCS8vICBTeXN0ZW0ub3V0LnByaW50bG4oc2IpOwoJCSAgICB0b3RhbEd1ZXNzZXMrKzsKCQl9CgkJbG9uZyB0aW1lID0gU3lzdGVtLm5hbm9UaW1lKCkgLSBzdGFydDsKCQlTeXN0ZW0ub3V0LnByaW50ZigiYWx0ZXJuYXRlUHJpbnQoKSB0b29rICUuM2Ygc2Vjb25kcyB0byBnZW5lcmF0ZSAlLGQgY29tYmluYXRpb25zJW4iLCB0aW1lIC8gMWU5LCB0b3RhbEd1ZXNzZXMpOwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJcHJpbnRBbGxTdHJpbmdzT2ZMZW5ndGgoNSk7CgkJYWx0ZXJuYXRlUHJpbnQoNSk7Cgl9Cn0=