有效时间的数目【LC2436】
给你一个长度为
5
的字符串time
,表示一个电子时钟当前的时间,格式为"hh:mm"
。最早 可能的时间是"00:00"
,最晚 可能的时间是"23:59"
。在字符串
time
中,被字符?
替换掉的数位是 未知的 ,被替换的数字可能是0
到9
中的任何一个。请你返回一个整数
answer
,将每一个?
都用0
到9
中一个数字替换后,可以得到的有效时间的数目。
乘法原理
2023/5/9
- 思路
如果某一位是问号,那么判断该位可以选择的个数,总的有效时间数目为所有位可以选择的个数的乘积。小时相邻位的值会相互影响,因此需要分情况判断
time[0]
是问号,time[1]
也是问号:选择个数为24time[0]
是问号,time[1]
不是问号:
time[1]>='4'
:选择个数为2(0、1)time[1]<'4'
:选择个数为3(0、1、2)
time[0]
不是问号,time[1]
是问号
time[0]=='2'
:选择个数为4(0、1、2、3)time[1]<'2'
:选择个数为10(0-9)time[3]
是问号:选择个数为6(0-5)time[4]
是问号:选择个数为10(0-9)
- 实现
class Solution { public int countTime(String time) { int res = 1; if (time.charAt(0) == '?'){ if (time.charAt(1) == '?'){ res = 24; }else if (time.charAt(1) >= '4'){ res = 2; }else{ res = 3; } }else if (time.charAt(1) == '?'){ if (time.charAt(0) == '2'){ res = 4; }else{ res = 10; } } if (time.charAt(3) == '?'){ res *= 6; } if (time.charAt(4) == '?'){ res *= 10; } return res; } }
枚举
- 思路:枚举每个时间,是否在选择范围内,如果是那么计数
- 问号位选择值必须在有效时间内
- 非问号位选择值为固定值
- 实现
class Solution { public int countTime(String time) { int ans = 0; for (int h = 0; h < 24; ++h) { for (int m = 0; m < 60; ++m) { String s = String.format("%02d:%02d", h, m); int ok = 1; for (int i = 0; i < 5; ++i) { if (s.charAt(i) != time.charAt(i) && time.charAt(i) != '?') { ok = 0; break; } } ans += ok; } } return ans; } } 作者:ylb 链接:https://leetcode.cn/problems/number-of-valid-clock-times/solutions/2262415/python3javacgotypescript-yi-ti-shuang-ji-shsr/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
枚举+乘法原理
- 思路
枚举小时及分钟可以选择的数目,然后通过乘法原理相乘得到总选择值 - 实现
class Solution { public int countTime(String time) { return count(time.substring(0, 2), 24) * count(time.substring(3), 60); } private int count(String time, int period) { var t = time.toCharArray(); int ans = 0; for (int i = 0; i < period; i++) if ((t[0] == '?' || i / 10 == t[0] - '0') && (t[1] == '?' || i % 10 == t[1] - '0')) ans++; return ans; } } 作者:灵茶山艾府 链接:https://leetcode.cn/problems/number-of-valid-clock-times/solutions/1895227/cheng-fa-yuan-li-fen-bie-ji-suan-xiao-sh-66d9/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。