一、题目
题目描述:
警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 "HH:MM" 表示的时刻。
根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:
利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。
每个出现数字都可以被无限次使用。
二、输入输出
输入描述:
形如HH:SS字符串,表示原始输入。
输出描述:形如HH:SS的字符串,表示推理处理的犯罪时间。
备注:
1.可以保证现任给定的字符串一定是合法的。
例如,"01:35"和"11:08"是合法的,"1:35"和"11:8"是不合法的。
2.最近的时刻可能在第二天。
三、示例
示例
20:12得到20:20
23:59得到22:22
12:58得到15:11
18:52得到18:55
23:52得到23:53
09:17得到09:19
07:08得到08:00
四、要求
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
五、解题思路
- 将输入的时间字符串转换为整数表示的小时和分钟。
- 将小时和分钟的每一位数字添加到一个集合中,表示可以使用的数字。
- 从当前分钟开始,每分钟增加1,如果增加后的分钟数的每一位数字都在集合中,那么这就是下一个可能的犯罪时间。
- 如果分钟数增加到60,那么小时数增加1,分钟数归0。如果小时数增加到24,那么小时数归0。
- 将找到的小时和分钟转换为字符串格式并返回。
六、参考代码
python
# -*- coding: utf-8 -*-
'''
@File : 2023-B-解密犯罪时间.py
@Time : 2023/12/30 00:25:01
@Author : mgc
@Version : 1.0
@Desc : None
'''
# import os
# import re
# import sys
# import copy
# import math
# import queue
# import functools
# from queue import Queue
# from collections import Counter, defaultdict
def next_time(time):
# 将输入的时间字符串转换为整数表示的小时和分钟
hour, minute = map(int, time.split(':'))
# 将小时和分钟的每一位数字添加到一个集合中
digits = set(time.replace(':', ''))
while True:
# 每分钟增加1
minute += 1
# 如果分钟数增加到60,那么小时数增加1,分钟数归0
if minute == 60:
minute = 0
hour += 1
# 如果小时数增加到24,那么小时数归0
if hour == 24:
hour = 0
# 将小时和分钟转换为字符串格式
time = f'{hour:02d}:{minute:02d}'
# 如果增加后的小时和分钟的每一位数字都在集合中,那么这就是下一个可能的犯罪时间
if set(time.replace(':', '')) <= digits:
return time
time = input()
result = next_time(time)
print(result)