有效时间的数目

简介: 有效时间的数目

说在前面

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

题目描述

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

目录
相关文章
|
5月前
最小操作次数问题
最小操作次数问题
39 1
假如要限制每个来访问的IP,每秒钟都不超过10次,应该如何设置?
假如要限制每个来访问的IP,每秒钟都不超过10次,应该如何设置?
548 0
|
4月前
|
缓存 JavaScript
请问如何在 keep-alive 组件中设置缓存的最大数量和过期时间
请问如何在 keep-alive 组件中设置缓存的最大数量和过期时间
|
5月前
1679.K和数对的最大数目
1679.K和数对的最大数目
29 0
|
5月前
933.最近的请求次数
933.最近的请求次数
35 0
|
存储 人工智能 缓存
如何设计一个速率限制器(令牌桶/漏桶/固定窗口/滑动窗口)
如何设计一个速率限制器(令牌桶/漏桶/固定窗口/滑动窗口)
如何设计一个速率限制器(令牌桶/漏桶/固定窗口/滑动窗口)
1186:出现次数超过一半的数
1186:出现次数超过一半的数
|
算法 Python
通过初始时间和流逝的分钟数计算终止时间
通过初始时间和流逝的分钟数计算终止时间
78 0
|
C++
201312-1 出现次数最多的数
201312-1 出现次数最多的数
69 0
201312-1 出现次数最多的数