需要一种算法,以 DD/MM HH:MM:SS 格式仅使用一次数字 0-9 来查找最早日期。实际答案是:26/03 17:48:59
最佳答案
最简单的方法 - 生成 [0...9] 的所有排列并检查它们是否是有效日期。
10 ! = 3 628 800
如果你想提高效率,回溯会有所帮助。在这种情况下,它只是一个简单的约束满足问题,有效日期的数量远远少于排列的数量。此外,您可以按最低月、最低日等顺序考虑它们。
例如
01 不起作用,因为时间的第一位数字(10s 小时)需要为 0 或 1 02 不起作用,因为现在时间的第一位必须是 1,而二月份的日期只能是 0,1,2。
等等。
FWIW - 只有 769 个有效日期
import datetime
import itertools
count = 1
for perm in itertools.permutations( range(10) ):
i = 0;
day = perm[i]+perm[i+1]*10
i+=2
month = perm[i]+perm[i+1]*10
i+=2
hour = perm[i]+perm[i+1]*10
i+=2
minute = perm[i]+perm[i+1]*10
i+=2
second = perm[i]+perm[i+1]*10
try:
print datetime.datetime( 2012, month, day, hour, minute, second)
count+=1
except:
pass
print count
关于algorithm - 以 DD/MM HH :MM:SS 格式仅使用一次数字 0-9 查找最早日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10504932/