临夏政府城乡建设网站seo排名点击手机
2023-05-09每日一题
一、题目编号
2437. 有效时间的数目
二、题目链接
点击跳转到题目位置
三、题目描述
给你一个长度为 5 的字符串 time ,表示一个电子时钟当前的时间,格式为 “hh:mm” 。最早 可能的时间是 “00:00” ,最晚 可能的时间是 “23:59” 。
在字符串 time 中,被字符 ? 替换掉的数位是 未知的 ,被替换的数字可能是 0 到 9 中的任何一个。
请你返回一个整数 answer ,将每一个 ? 都用 0 到 9 中一个数字替换后,可以得到的有效时间的数目。
四、解题代码
class Solution {
public:int countTime(string time) {int minute = 0;int hour = 0; int res = 0;if(time[3] == '?'){if(time[4] == '?'){minute = 60;} else{minute = 6; }} else{if(time[4] == '?'){minute += 10;} }if(time[0] == '?'){if(time[1] == '?'){hour = 24;} else if(time[1] >= '4'){hour = 2;} else{hour = 3;}} else{if(time[1] == '?'){if(time[0] <= '1'){hour = 10;} else{hour = 4;}} }if(minute == 0 && hour == 0){return 1;} else if(minute == 0 && hour != 0){return hour;} else if(minute != 0 && hour == 0){return minute;} else{return hour * minute;}return 0;}
};
五、解题思路
(1) 用hour来记录 ‘?’ 所能替换的小时有多少种可能性,用minute来记录 ‘?’ 所能替换的分钟有多少种可能性。这里面讨论的是包含‘?’所能得到的小时和分钟的可能性,如果hour和minute最终的值不为0,即字符串中不包含‘?’,其自身就是一种可能性,应当返回答案1而不是0。
(2) 先讨论分钟,分钟由M1M2来组成,先讨论M1,如果M1 是 ‘?’ 的话,此时M1可能的值为0-5 6种,如果M2 == ‘?’ 的话,那么总共可能性为60种。如果M2 非问号,则总共可能性为6种。如果M1不是 ‘?’ 的话,判断M2是否为‘?’,不是的话则总可能性为0种,如果是‘?’ 的话,则总可能性为10种,即0-9。
(3) 再讨论时钟,时钟由H1H2来组成,先讨论H1,如果H1是 ‘?’ 的话,此时H1可能的值为0-2 2种,如果M2 == ‘?’ 的话,那么总共可能性为24种。如果M2非问号,则总共可能性得根据M2来判断,如果M2大于等于4,则M1不能为2为两种,否则的话,M1可以为2,则总共有3种。如果H1不是 ‘?’ 的话,则判断H2是否是‘?’,是的话则总可能性需要根据H1来判断,判断方式与之前所述类似,主要是判断H1是否是等于2。如果H2不是‘?’ 则总的可能性为0种。
(4) 最后按照hour和minute的值来进行组合求值。注意的是,hour == 0且minute == 0,返回1,理由在(1) 中已经阐述。