给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。
有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。
替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。
输入:time = "2?:?0"
输出:"23:50"
解释:以数字 '2' 开头的最晚一小时是 23 ,以 '0' 结尾的最晚一分钟是 50 。
输入:time = "0?:3?"
输出:"09:39"
输入:time = "1?:22"
输出:"19:22"
提示:
Problem: 1736. 替换隐藏数字得到的最晚时间
要注意时间之间各位置的相互影响以及
?
出现的位置
先分割成数组方便找到
?
和替换等操作
然后判断?
出现的位置(值得注意的是数组中的0和1的内容,3和4位置都替换成固定数即可)
如果数组中0和1同时出现?
把第一位换成2即可,后续逻辑会把第二位换成3
如果第一位是?
查看一下第二位的值是否大于3,如果是把第一位换成1,如果不是将第一位换成2
如果第二位是?
查看第一位的值是否为2,如果是把第二位换成4,如果不是则换成9
class Solution {
/**
* @param String $time
* @return String
*/
function maximumTime($time) {
//切割成数组
$time = str_split($time,1);
//循环数组找位置以及判断
foreach($time as $k=>$v){
//如果找到?
if($time[$k]=="?"){
//判断位置
switch($k){
//第一位
case 0:
//如果第一位第二位同时出现?
if($time[1]=="?"){
$time[$k] = 2;
}
//如果第二位大于3
elseif($time[1]>3){
$time[$k] = 1;
}
else{
$time[$k] = 2;
}
break;
//第二位
case 1:
//判断第一位是否为2
if($time[0]==2){
$time[$k] = 3;
}else{
$time[$k] = 9;
}
break;
case 3:
$time[$k] = 5;
break;
case 4:
$time[$k] = 9;
break;
}
}
}
//数组转成字符串输出
return implode($time);
}
}