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])