力扣——2437.有效时间的数目
2437. 有效时间的数目
给你一个长度为 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之间的数字替换。
问题解析
分类讨论。计算组合数,初始num=1.
对于第一个位置,可能的数是0、1、2,但要是想选到2需要满足第二个位置不为大于4的数,如果满足就num*=3;否则num *=2。
对于第二个位置,可能的数是0到9,但如果第一个数是2,则只能取到3,num * =3。如果不是,则num*=10;
对于第三个位置,可能的数是0到5,num*=6;
对于第四个位置,可能的数是0到9,num*=10;
AC代码
class Solution {
public:
int countTime(string time) {
int num=1;
if(time[0]=='?'&&time[1]=='?')num*=24;
else if(time[0]=='?')
{
if(time[1]>='4')num*=2;
else num*=3;
}
else if(time[1]=='?')
{
if(time[0]>='2')num*=4;
else num*=10;
}
if(time[3]=='?'&&time[4]=='?')num*=60;
else if(time[3]=='?')
{
num*=6;
}
else if(time[4]=='?')
{
num*=10;
}
return num;
}
};