これを実現するには、基数3を使用して最大値(この例では22222)までカウントアップすることができます。BigIntegerクラスは、任意の基数での出力とインスタンス化をサポートします。ただし、BigIntegerクラスはゼロフィルをサポートしていないため、これを自分で追加しました。結果のソリューションは次のとおりです。
public static void main( String[] args ) {
System.out.println( new BitStrings().generateBitStrings( new BigInteger( "2222", 3 ) ) );
}
public List<String> generateBitStrings( BigInteger maxValue ) {
final String format = "%0" + maxValue.toString( 3 ).length() + "d";
BigInteger current = BigInteger.ZERO;
final List<String> result = new ArrayList<String>( maxValue.intValue() );
do {
result.add( String.format( format, Long.valueOf( current.toString( 3 ) ) ) );
current = current.add( BigInteger.ONE );
} while(current.compareTo( maxValue ) <= 0);
return result;
}
出力:
[0000, 0001, 0002, 0010, 0011, 0012, 0020, 0021, 0022, 0100, 0101, 0102, 0110, 0111, 0112, 0120, 0121, 0122, 0200, 0201, 0202, 0210, 0211, 0212, 0220, 0221, 0222, 1000, 1001, 1002, 1010, 1011, 1012, 1020, 1021, 1022, 1100, 1101, 1102, 1110, 1111, 1112, 1120, 1121, 1122, 1200, 1201, 1202, 1210, 1211, 1212, 1220, 1221, 1222, 2000, 2001, 2002, 2010, 2011, 2012, 2020, 2021, 2022, 2100, 2101, 2102, 2110, 2111, 2112, 2120, 2121, 2122, 2200, 2201, 2202, 2210, 2211, 2212, 2220, 2221, 2222]
これがあなたの質問に答えることを願っています。