有效时间的数目

发布时间:2023年12月22日

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

给你一个长度为?5?的字符串?time?,表示一个电子时钟当前的时间,格式为?“hh:mm”?。最早?可能的时间是?“00:00”?,最晚?可能的时间是?“23:59”?。

在字符串?time?中,被字符???替换掉的数位是 未知的?,被替换的数字可能是?0?到?9?中的任何一个。

请你返回一个整数?answer?,将每一个 ??都用?0?到?9?中一个数字替换后,可以得到的有效时间的数目。

示例 1:

输入:time = "?5:00"
输出:2
解释:我们可以将 ? 替换成 0 或 1 ,得到 "05:00" 或者 "15:00" 。注意我们不能替换成 2 ,因为时间 "25:00" 是无效时间。所以我们有两个选择。

示例 2:

输入:time = "0?:0?"
输出:100
解释:两个 ? 都可以被 0 到 9 之间的任意数字替换,所以我们总共有 100 种选择。

示例 3:

输入:time = "??:??"
输出:1440
解释:小时总共有 24 种选择,分钟总共有 60 种选择。所以总共有 24 * 60 = 1440 种选择。

提示:

  • time?是一个长度为 5?的有效字符串,格式为?“hh:mm”?。
  • “00” <= hh <= “23”
  • “00” <= mm <= “59”
  • 字符串中有的数位是?‘?’?,需要用?0?到?9?之间的数字替换。

思路分析

首先我们要先理解一下题目的意思,题目会给我们一个字符串,格式为?“hh:mm”?,表示一个电子时钟当前的时间。我们可以用0到9中的数字来替换字符串中的?,我们需要计算替换后有效的时间个数。其中最早可能的时间是?00:00?,最晚可能的时间是?23:59?。

我们可以将字符串分为小时和分钟两部分,小时的第一位取值会影响到第二位的取值,分钟的第一位取值也会影响到第二位的取值,所以我们需要分情况来考虑。

  • 1、小时以0或1开头时,第二位可以为0-9的任意一位
  • 2、小时以2开头,第二位可以为0-3的任意一位
  • 3、分钟为0到59,总共有60中取值

接下来我们根据?的位置来计算其取值的可能性:

  • 1、小时的第一位和第二位的为?

小时的两位都为?时,小时的取值为00 - 23,总共为24种

  • 2、小时的第一位为?且第二位大于3

此时第一位的取值为0 - 1,共2种

  • 3、小时的第一位为?且第二位小于等于3

此时第一位的取值为0 - 2,共3种

  • 4、小时的第二位为?且第一位等于2

此时第二位的取值为0 - 3,共4种

  • 5、小时的第二位为?且第一位不等于2

此时第二位的取值为0 - 9,共10种

  • 6、分钟的第一位为?且第二位为?

此时分钟的取值为00 - 59,共60种

  • 7、分钟的第二位为?且第一位不为?

此时分钟的第一位取值为0 - 5,共6种

  • 8、分钟的第二位为?且第一位不为?

此时分钟的第二位取值为0 - 9,共10种

最后将分钟和小时各自的取值个数相乘即为有效的时间个数。

完整AC代码如下:

AC代码

/**
 * @param {string} time
 * @return {number}
 */
var countTime = function(time) {
    let a = 1,b = 1;
    if(time[0] == '?' && time[1] == '?') a = 24;
    else if(time[0] == '?') a = time[1] > 3 ? 2 : 3;
    else if(time[1] == '?') a = time[0] == '2' ? 4 : 10;
    
    if(time[3] == '?') b = 6;
    if(time[4] == '?') b = time[3] == '?' ? 60 : 10;
    return a * b;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

文章来源:https://blog.csdn.net/Twinkle_sone/article/details/135151736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。