需要一个算法来查找最早的日期,只使用数字0-9一次,格式为dd/mm hh:mm:ss。实际答案是:26/03 17:48:59

最佳答案

最简单的方法-生成[0…9]的所有排列并检查它们是否是有效日期。
10个=3628800个
如果你想提高效率,回溯会有帮助。在这种情况下,这只是一个简单的约束满足问题,有效日期的数目远小于排列的数目此外,您可以按最低月份、最低日等顺序考虑它们。
例如
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/

10-09 09:36