leetcode
leetcode 1551 ~ 1600
替换隐藏数字得到的最晚时间

替换隐藏数字得到的最晚时间

难度:

标签:

题目描述

代码结果

运行时间: 24 ms, 内存: 0.0 MB


/*
 * 思路:
 * 使用Java Stream API实现类似功能。
 * 对于每个字符,通过Stream流的map操作进行判断和替换。
 * 最后将字符数组组合成字符串。
 */
import java.util.stream.IntStream;

public class LatestTimeStream {
    public static String maximumTime(String time) {
        char[] t = time.toCharArray();
        t[0] = t[0] == '?' ? (t[1] == '?' || t[1] <= '3' ? '2' : '1') : t[0];
        t[1] = t[1] == '?' ? (t[0] == '2' ? '3' : '9') : t[1];
        t[3] = t[3] == '?' ? '5' : t[3];
        t[4] = t[4] == '?' ? '9' : t[4];
        return IntStream.range(0, t.length)
                        .mapToObj(i -> String.valueOf(t[i]))
                        .reduce("", (a, b) -> a + b);
    }

    public static void main(String[] args) {
        String time = "0?:3?";
        System.out.println(maximumTime(time)); // 输出: 09:39
    }
}

解释

方法:

此题解通过直接检查输入字符串time中的每一位来构造可能的最晚时间。首先处理小时部分(前两位),然后处理分钟部分(后两位)。对于小时部分,首先检查第一位是否为'?',如果是,则根据第二位的值来决定第一位应该是'1'还是'2'。如果第二位也是'?',则直接设为'23'(因为这是可能的最大小时)。如果第二位不是'?',则根据其值是否大于3来决定第一位数字。对于分钟部分,如果第三或第四位是'?',则分别替换为可能的最大值'5'和'9'来得到最晚的时间。

时间复杂度:

O(1)

空间复杂度:

O(1)

代码细节讲解

🦆
在解析小时数时,如果第一位是'2'而第二位是'?', 为什么将第二位设为'3'而不是'9'?
在24小时制的时间表示中,小时数的最大值是23。因此,如果时间的第一位是'2',那么第二位最多只能是'3',以确保时间属于有效范围。如果将第二位设为'9',则会形成'29'小时,这是不合理的。因此,为了保证时间的合法性,当第一位为'2'时,第二位必须在0到3之间,最大设为'3'。
🦆
代码在处理小时的第一位时,有一个分支是当第一位和第二位都为'?'时直接设置为'23',这样的处理能否涵盖所有可能的最大小时数设置?
当小时部分的第一位和第二位都是'?'时,设置为'23'确实能覆盖最大小时数的情况,因为'23'是一天中可能的最晚小时数。这样的设定简化了逻辑,并直接提供了可能的最晚时间。因此,这种处理方法不仅有效,而且直接使得输出时间尽可能晚,符合题目的要求。

相关问题