一、刷题内容
原题链接
https://leetcode-cn.com/problems/latest-time-by-replacing-hidden-digits/
内容描述
给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。
有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。
替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。
示例 1:
输入:time = “2?:?0”
输出:“23:50”
解释:以数字 ‘2’ 开头的最晚一小时是 23 ,以 ‘0’ 结尾的最晚一分钟是 50 。
示例 2:
输入:time = “0?:3?”
输出:“09:39”
示例 3:
输入:time = “1?:22”
输出:“19:22”
提示:
time 的格式为 hh:mm
题目数据保证你可以由输入的字符串生成有效的时间
二、解题方法
1.方法一:贪心
为了得到最晚有效时间,我们可以从高位向低位枚举,在保证时间有效的情况下,使得每一位尽可能取最大值。
因为本题中时间的位数较少,我们依次考虑每一位的规则即可。
第一位:若第二位的值已经确定,且值落在区间 [4,9][4,9] 中时,第一位的值最大只能为 11,否则最大可以为 22;
第二位:若第一位的值已经确定,且值为 22 时,第二位的值最大为 33,否则为 99;
第三位:第三位的值的选取与其它位无关,最大为 55;
第四位:第四位的值的选取与其它位无关,最大为 99。
class Solution:
def maximumTime(self, time: str) -> str:
time = list(time)
for i in range(len(time)):
if i==0 and time[i]=='?':
if time[i+1] == '?' or int(time[i+1])<=3:
time[i] = '2'
else:
time[i] = '1'
if i==1 and time[i]=='?':
if time[i-1]=='0' or time[i-1]=='1':
time[i] = '9'
else:
time[i] = '3'
if i==3 and time[i]=='?':
time[i] = '5'
if i==4 and time[i]=='?':
time[i] = '9'
return ''.join(time)
2.方法二
class Solution:
def maximumTime(self, time: str) -> str:
time = list(time)
if time[0] == '?':
time[0] = '2' if time[1] in ('0','1','2','3','?') else '1'
if time[1] == '?':
time[1] = '9' if time[0] in ('0','1') else '3'
if time[3] == '?': time[3] = '5'
if time[4] == '?': time[4] = '9'
return "".join(time)
本文介绍了如何解决LeetCode上的一个问题——替换隐藏数字得到的最晚时间。通过贪心策略,从高位到低位,确保每个位置在合法范围内取最大值,从而得到最晚的有效时间。例如,对于输入'2?:?0',输出为'23:50'。解题方法包括直接根据时间规则设置每位最大值,如将'?'替换为对应位置的最大可能数字。

被折叠的 条评论
为什么被折叠?



