题目链接
Leetcode.2437 有效时间的数目 Rating : 1427
题目描述
给你一个长度为 5 的字符串
t
i
m
e
time
time ,表示一个电子时钟当前的时间,格式为 "hh:mm"
。最早 可能的时间是 "00:00"
,最晚 可能的时间是 "23:59"
。
在字符串 t i m e time time 中,被字符 ? 替换掉的数位是 未知的 ,被替换的数字可能是 0 到 9 中的任何一个。
请你返回一个整数 a n s w e r answer 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 种选择。
提示:
-
t
i
m
e
time
time 是一个长度为 5 的有效字符串,格式为
"hh:mm"
。 "00" <= hh <= "23"
"00" <= mm <= "59"
- 字符串中有的数位是
'?'
,需要用 0 到 9 之间的数字替换。
解法:分类讨论
- s [ 0 ] = ′ ? ′ & & s [ 1 ] = ′ ? ′ s[0] = '?' \&\& s[1] = '?' s[0]=′?′&&s[1]=′?′,有 24 种选择;
-
- s [ 0 ] = ′ ? ′ & & s [ 1 ] ≥ ′ 4 ′ s[0] = '?' \&\& s[1] \geq '4' s[0]=′?′&&s[1]≥′4′,有 2 种选择;
-
- s [ 0 ] = ′ ? ′ & & s [ 1 ] < ′ 4 ′ s[0] = '?' \&\& s[1] < '4' s[0]=′?′&&s[1]<′4′,有 3 种选择;
-
- s [ 0 ] = ′ 2 ′ & & s [ 1 ] = ′ ? ′ s[0] = '2' \&\& s[1] = '?' s[0]=′2′&&s[1]=′?′,有 4 种选择;
-
- s [ 0 ] < ′ 2 ′ & & s [ 1 ] = ′ ? ′ s[0] < '2' \&\& s[1] = '?' s[0]<′2′&&s[1]=′?′,有 10 种选择;
- s [ 3 ] = ′ ? ′ s[3] = '?' s[3]=′?′ ,有 6 种选择;
- s [ 4 ] = ′ ? ′ s[4] = '?' s[4]=′?′ ,有 10 种选择;
时间复杂度: O ( 1 ) O(1) O(1)
C++代码:
class Solution {
public:
int countTime(string s) {
int ans = 1;
if(s[0] == '?' && s[1] == '?') ans = 24;
else if(s[0] == '?'){
if(s[1] >= '4') ans = 2;
else ans = 3;
}
else if(s[1] == '?'){
if(s[0] < '2') ans = 10;
else ans = 4;
}
if(s[3] == '?') ans *= 6;
if(s[4] == '?') ans *= 10;
return ans;
}
};