力扣——2437.有效时间的数目

152 阅读1分钟

力扣——2437.有效时间的数目

2437. 有效时间的数目

给你一个长度为 5 的字符串 time ,表示一个电子时钟当前的时间,格式为 "hh:mm"最早 可能的时间是 "00:00"最晚 可能的时间是 "23:59"

在字符串 time 中,被字符 ? 替换掉的数位是 未知的 ,被替换的数字可能是 09 中的任何一个。

请你返回一个整数 answer ,将每一个 ? 都用 09 中一个数字替换后,可以得到的有效时间的数目。

示例 1:

输入:time = "?5:00"
输出:2
解释:我们可以将 ? 替换成 01 ,得到 "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"
  • 字符串中有的数位是 '?' ,需要用 09 之间的数字替换。

问题解析

分类讨论。计算组合数,初始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;
    }
};