这是解决此问题的合理通用方法:
digits = [
# value, init, count, suffix, order
[ 'A', 'A', 26 , '', 6],
[ 'A', 'A', 26 , ' ', 5],
[ '0', '0', 10, '', 2 ],
[ '0', '0', 10, '', 1 ],
[ '0', '0', 10, ' ', 0 ],
[ 'A', 'A', 26 , '', 4],
[ 'A', 'A', 26 , '', 3],
]
def plate(digits):
out = []
for item in digits:
out.append( item[0] )
out.append( item[3] )
return ''.join(out)
def increment(digits):
digits = sorted(digits, key = lambda x : x[-1] )
for item in digits:
v = ord(item[0]) + 1
item[0] = chr(v)
if v < ord(item[1]) + item[2]:
break
item[0] = item[1]
value = plate( digits )
while value != 'ZZ 999 ZZ':
print(value)
increment(digits)
value = plate( digits )
print(value)
string 和 int 之间有很多转换。我也每次都在构建输出字符串,所以它有点慢。
产量很大。大约有 4.57 亿个输出值 ( 26^4 * 10^3 )。