首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅使用数字0-9查找最早日期一次,格式为DD/MM HH:MM:SS

仅使用数字0-9查找最早日期一次,格式为DD/MM HH:MM:SS
EN

Stack Overflow用户
提问于 2012-05-09 03:11:54
回答 2查看 968关注 0票数 2

我需要一个算法来找到最早的日期使用数字0-9只有一次的格式DD/MM HH:MM:SS。实际答案是: 26/03 17:48:59

EN

回答 2

Stack Overflow用户

发布于 2012-05-09 03:20:52

最简单的方法-生成0...9的所有排列,并检查它们是否为有效日期。

10 =3 628 800

如果你想提高效率,回溯会有所帮助。在这种情况下,这只是一个简单的约束满足问题,有效日期的数量远远少于排列的数量。此外,您可以按最低月份、最低日期等顺序考虑它们。

例如

01不起作用,因为时间的第一个数字(10s小时)需要是0或1。02不起作用,因为现在时间的第一个数字必须是1,而日期在二月只能是0,1,2。

诸若此类。

FWIW -只有769个有效日期

代码语言:javascript
运行
复制
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
票数 3
EN

Stack Overflow用户

发布于 2012-05-09 21:33:33

这是一个constraint satisfaction problem。您可能希望先使用日期格式MM/DD HH:MM:SS,然后再转换您的答案。在这种格式中,字典顺序上最小的有效日期字符串将是您要查找的答案,因此,如果您系统地搜索,那么您找到的第一个有效日期将是解决方案。

基本上,您的搜索空间具有12x31x24x60x60的大部分有效日期。因此,您的约束包括:

代码语言:javascript
运行
复制
month < 13
day   < 32
hour  < 24
minutes < 60
seconds < 60
occurrence(date, i) == 1 for each i = 0 to 9

然后,您可以使用backtracking search algorithm系统地遍历搜索空间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10504932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档