4.解密犯罪时间



主要是通过回溯来找到符合小时和分钟时间点的数字
s = input()
num_list = list(set([int(x) for x in s if x != ":"]))
print(num_list)
H, M = map(int, s.split(":"))
print(H, M)
H_list = []  # 存放可能的小时组合
M_list = []  # 存放可能的分钟组合
path = []

# 回溯找到符合时间的数字填到上面两个列表中
def backtrack(arr):
    if len(path) == 2:
        num = "".join([str(x) for x in path])
        if 0 < int(num) < 24:
            H_list.append(num)
        if 0 < int(num) < 60:
            M_list.append(num)
        return
    for j in range(len(arr)):
        path.append(arr[j])
        backtrack(arr)
        path.pop()


backtrack(num_list)
print(H_list)
print(M_list)

H_list.sort(key=lambda x: int(x))  # 将小时升序排列
M_list.sort(key=lambda x: int(x))   # 将分钟升序排列
print(H_list)
print(M_list)
# 最近时间优先找同个小时内的,先去遍历分钟,找到大于此时刻的分钟就可以输出了,同时break。没找到则调到else
for i in M_list:
    if int(i) > M:
        print(str(H)+":"+i)
        break
# 执行到这一步说明同一天没有符合条件的输出,那么只需要输出第二天最早的时间点即可,这就是之前排序的妙用
else:
    print(H_list[0] + ":" + M_list[0])


#华为机试#
全部评论
解密犯罪时间
点赞
送花
回复 分享
发布于 2022-10-22 17:36 河南

相关推荐

变异者:10元一天好笑程度100% 我去是哪个意思好笑程度1000%
点赞 评论 收藏
分享
2 3 评论
分享
牛客网
牛客企业服务