替换隐藏数字得到的最晚时间
难度:
标签:
题目描述
代码结果
运行时间: 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'?
▷🦆
代码在处理小时的第一位时,有一个分支是当第一位和第二位都为'?'时直接设置为'23',这样的处理能否涵盖所有可能的最大小时数设置?
▷