为此,您可以使用基数 3 计数到最大值(在您的示例中为 22222)。 BigInteger 类支持使用任意基数的输出和实例化。然而,BigInteger 类不支持 zerofill,这就是我自己添加它的原因。这是得到的解决方案:
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]
希望这能回答你的问题。