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