警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如“HH:MM”表示的时刻。
根据警察和线人的约定,为了隐蔽,该时间时修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。
每个出现数字都可以被无限次使用。
输入描述:
形如HH:SS字符串,表示原始输入
输出描述:
形如HH:SS的字符串,表示推理处理啊的犯罪时间。
备注:
1.可以保证现任给定的字符串一定是合法的。例如,“01:35”和“11:08”是合法的,“1:35”和“11:8”是不合法的。
2.最近的时刻可能在第二天。
示例1: 14:45 14:51 14:54 23:50 23:53 23:55 23::52
输入
18:52
输出
18:55
def decrypt_crime_time(s):
nums_list = [int(i) for i in s if i != ":"]
H, M = [int(i) for i in s.split(":")]
# ['11', '10', '15', '13', '01', '00', '05', '03', '51', '50', '55', '53', '31', '30', '35', '33']
time = []
for i in nums_list:
for j in nums_list:
time.append(str(i) + str(j))
print(time)
# 存放分钟
time1=[]
# 存放小时
time2=[]
# 处理当天的数据,只要更新分钟
for i in range(len(time)):
if int(time[i]) > M and int(time[i]) <= 59: # 大于当前分钟的
time1.append(time[i])
if len(time1)>0:
time1.sort()
# 需要更新分钟 小时不变,分钟取大于最接近M的值
if H < 10: # 如果小时是一位数,需要在返回前面补充0
return '0'+str(H) +":"+ time1[0]
else:
return str(H) + ":" + time1[0]
else:
# 需要更新小时 小时需要更新,分钟取最小
for i in range(len(time)):
if int(time[i]) > H and int(time[i]) <=23 :
time2.append(time[i])
if len(time2)>0:
time2.sort()
return str(time2[0]) +":"+ str(min(time))
# 需要更新第二天的时间 小时取最小,分钟取最小
else:
return str(min(time)) + ":" + str(min(time))
s = "23:33"
print(decrypt_crime_time(s))