LeetCode问题:填充时间字符串中的?以得到最大可能的HH:MM
填充时间字符串问号,得到最大合法时间
这是个典型的贪心填充问题,核心就是在合法时间范围(00:00-23:59)内,给每个问号填能放的最大数字。直接把时间拆成**小时(前两位)和分钟(后两位)**分开处理就行:
处理小时部分
小时的上限是23,得根据两位的情况灵活填:
- 如果第一位是问号:
- 第二位也是问号的话,直接填23(这是最大的合法小时)
- 第二位是数字的话,要是这个数字≤3,第一位填2(比如第二位是3就凑23,是1就凑21);要是数字>3,第一位只能填1(比如第二位是4,最大合法小时就是14)
- 如果第一位是确定的数字(0、1、2):
- 第二位是问号的话,要是第一位是2,第二位最多填3(毕竟23是小时上限);要是第一位是0或1,直接填9就行(比如0?凑09,1?凑19)
处理分钟部分
分钟的上限是59,这部分规则很简单:
- 分钟的十位是问号?直接填5(因为59是最大的合法分钟)
- 分钟的个位是问号?直接填9
- 两位都是问号?直接填59
实际例子
- 输入
??:??→ 输出23:59 - 输入
2?:?3→ 输出23:53 - 输入
?4:??→ 输出14:59 - 输入
0?:3?→ 输出09:39
代码实现(Python)
如果要写代码实现这个逻辑,直接按上面的规则来就行:
def get_max_valid_time(time_str): # 把字符串拆成单个字符 h1, h2, colon, m1, m2 = list(time_str) # 处理小时第一位 if h1 == '?': if h2 == '?': h1, h2 = '2', '3' else: h1 = '2' if int(h2) <= 3 else '1' # 处理小时第二位 if h2 == '?': h2 = '3' if h1 == '2' else '9' # 处理分钟部分 m1 = '5' if m1 == '?' else m1 m2 = '9' if m2 == '?' else m2 return f"{h1}{h2}:{m1}{m2}"
内容的提问来源于stack exchange,提问作者Hemant Kapoor
相关产品推荐
相关产品推荐

