华为机试二星题--解密犯罪时间

我的想法先从分钟起加时间,如果能凑成就输出
如果凑成的数字小于原始分钟,说明时针+1
如果除了原始分钟凑不出任何一对,就凑时针
算法不用 没用回溯 用了字典 python3实现
n, m = input().split(':')
s = n + m
d = set(s)

def search(l):
    d1 = set(l)
    if d1 <= d:
        return True
    else:
        return False
mn = 0
nn=int(n)
shi = [i for i in range(1, 25)]
fen = [i for i in range(1, 61)]
fenn = fen[int(m):] + fen[:int(m)-1]
for each in fenn:
    if search(str(each)):
        mn = each
        break
if mn<int(m):
    nn=int(n)+1
shin = shi[int(nn):] + shi[:int(nn)]

if not mn:
    for each in shin:
        if search(str(each)):
            nn = each
            mn = m
            break
if mn<10:
    mn='0'+str(mn)

if nn<10:
    nn='0'+str(nn)
    
print(':'.join([str(nn), str(mn)]))


#华为##华为笔试#
全部评论
def func():     s = input()     s_clock = '&(30209)#39;.join(s.split(':&(31936)#39;))     strr = '&#39;.join(s.split(':&(31936)#39;))*4     res = []     all_li = itertools.permutations(strr, 4)     for i in all_li:         if 0 <= int(i[0]+i[1]) <= 24 and 0 <= int(i[2]+i[3]) <= 59:             clock = i[0]+i[1]+i[2]+i[3]             res.append(clock)     max_res = [m for m in res if m > s_clock]     if max_res:         ans = min(max_res)     else:         ans = min(res)     print(ans[:2]+':&(31936)#39;+ans[2:]) 用全排列解会不会超时呢
点赞 回复 分享
发布于 2022-11-11 18:14 广东

相关推荐

10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
评论
1
6
分享
牛客网
牛客企业服务