You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:30:50