原题描述
给你一个字符串 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"
解题方法
1.处理小时.分三种情况
- 小时个位和十位都为?,最晚一定是23
//小时两位都为?,最晚一定是23
if (chars[0]=='?'&&chars[1]=='?'){ //如 ??:59
chars[0]='2';
chars[1]='3';
}
- 小时十位为?,个位不为?
if (chars[0]=='?'){//小时十位为?
if (chars[1]>'3'){// 个位大于3 十位最大只能取1 如 ?5:59
chars[0]='1';
}else {//个位小于等于2 如 ?3:59
chars[0]='2';// 十位最大可以取2
}
}
- 十位不为? ,个位是?
if (chars[1]=='?'){//十位不为? 个位是?
// 十位是2 个位只能取3 最大是23 如 2?:59
if (chars[0]=='2'){
chars[1]='3';
}else {// 十位是1或0 ,个位都可以取9 最大是19 如 1?:59
chars[1]='9';
}
}
2.处理分钟,个位十位相互不影响,单独处理
//处理分钟 个位十位相互不影响 单独处理
//分钟十位为? 就取5 23:?9
if (chars[3]=='?'){
chars[3]='5';
}
//分钟个位为? 就取9 23:5?
if (chars[4]=='?'){
chars[4]='9';
}
复杂度
-
时间复杂度: O(1)
-
空间复杂度: O(1)
Code
class Solution {
public String maximumTime(String time) {
char[] chars = time.toCharArray();
//处理小时 个位和十位相互影响 需要一起处理
//小时两位都为?,最晚一定是23
if (chars[0]=='?'&&chars[1]=='?'){ //如 ??:59
chars[0]='2';
chars[1]='3';
}else if (chars[0]=='?'){//小时十位为?
if (chars[1]>'3'){// 个位大于3 十位最大只能取1 如 ?5:59
chars[0]='1';
}else {//个位小于等于2 如 ?3:59
chars[0]='2';// 十位最大可以取2
}
}else if (chars[1]=='?'){//十位不为? 个位是?
// 十位是2 个位只能取3 最大是23 如 2?:59
if (chars[0]=='2'){
chars[1]='3';
}else {// 十位是1或0 ,个位都可以取9 最大是19 如 1?:59
chars[1]='9';
}
}
//处理分钟 个位十位相互不影响 单独处理
if (chars[3]=='?'){//分钟十位为? 就取5 23:?9
chars[3]='5';
}
if (chars[4]=='?'){//分钟个位为? 就取9 23:5?
chars[4]='9';
}
return new String(chars);
}
}