Может быть трудно хранить в памяти все двоичные строки длиной 17, поскольку таких строк более 100 тыс., Каждая длиной 17 символов. Я предполагаю, что вы будете кодировать двоичные строки как массив символов из символов «0» и «1»?
Рассмотрите возможность реализации последовательностей как экземпляра генератора (доступно в Java 8+). Это создаст впечатление, что последовательности являются массивами всех возможных битовых строк длины n, когда в действительности они будут генерироваться на лету. Это сокращает использование памяти. Вы можете создать эти экземпляры генератора с помощью метода, который принимает длину строк битов, которые будут получены этим генератором, а затем возвращает генератор, который выдаст все такие строки битов этой длины.
Я буду не беспокойтесь о реализации генератора, пока вы не укажете, как должны кодироваться битовые строки (как целые числа, строки и т. д. c.). Также укажите, важен ли порядок строк битов в последовательности, т. Е. Если для последовательностей 4, 0100 должен быть в индексе сразу после 0011.