携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情
题目描述
给你一个字符串 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- 题目数据保证你可以由输入的字符串生成有效的时间
思路分析
从题意可知,这次的题目跟时间有关系的,先来说下时间格式吧,一般都是24小时制的,写法是:23:24;晚上的12点,也就是24点需要写成00:00,当天结束的那一个时间点,也就是下一天的开始,所以23:59就是最大值了。
为了能尽量取到最大值,我们小时的位置向分钟的位置枚举,在有效时间的范围内尽可能的取得最大值。
第一个数只有两个选择,1或者2;它的取值取决于第二个数,若第二个数的范围是在[4,9]之间,那么,第一个值只能取1,否则取2;
第二个值的取之也要取决于第一个值,若是第一个值是2,那么第二个值的最大值就是3,否则其最大值就是9;
第四个值就和其他值没有关系了,直接取最大值5(因为分钟的最大值60);
第五个值也和其他值每关系,可以直接取最大值9。
AC代码
function solution( time ) {
const timeArr = Array.from(time);
if( timeArr[0] === '?' ) {
if( timeArr[1] >= '4' && timeArr[1] <= '9' ) {
timeArr[0] = '1';
} else {
timeArr[0] = '2';
}
}
if( timeArr[1] === '?' ) {
debugger
if( timeArr[0] === '2' ) {
timeArr[1] = '3';
} else {
timeArr[1] = '9';
}
}
if( timeArr[3] === '?' ) {
timeArr[3] = '5';
}
if( timeArr[4] === '?' ) {
timeArr[4] = '9';
}
console.log(timeArr.join(''));
}
let time = "2?:?0";
solution( time );