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

157 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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 );