有效时间的数目
说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
给你一个长度为?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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!