class Solution {
public:
int countTime(string time) {
int n = time.length();
int ans = 1;
for(int i = 0 ; i < n ; i++) //循环遍历每一个字符
{
if(time[i] == ':') //处理 :
{
continue;
}
if(i == 0 && time[i] == '?' && time[i+1] == '?' ) //特判 h1 h2都为?
{
ans *= 24;
i++;
}else{
if(i == 0 && time[i] == '?' && time[i+1] != '?' && time[i+1] < '4')//处理h1为? h2小于4数字
{
ans *= 3; //h1只能取 0 1 2
i++;
}
if(i == 0 && time[i] == '?' && time[i+1] != '?' && time[i+1] >= '4')//处理h1为? h2大于等于4数字
{
ans *= 2; //h1只能取 0 1
i++;
}
if(i == 1 && time[i] == '?' && time[i-1] == '2' )//处理h1为数字2,h2为?
{
ans *= 4; //h2只能取 0 1 2 3
}
if(i == 1 && time[i] == '?' && time[i-1] <= '1' )//处理h1为数字0或1,h2为?
{
ans *= 10; //h2 取0~9
}
}
if(time[i] == '?' && i==3) //处理m1
{
ans *= 6;
}
if(time[i] == '?' && i==4) //处理m2
{
ans *= 10;
}
}
return ans;
}
};
//hh::mm 23:59 hh:00~19 + 20~24 (20+4)
//h1 取0或1 , h2可取 0~9 (2*10=20种)
//h1 取2 , h2可取 0 1 2 3 (4种)
//m1 可取 0~5 (6种)
//m2 可取 0~9 (10种)