这个题如果开始写之前思路清晰,其实非常简单。
先写一个函数,处理一小时内,任意分钟之间的完整对局数的计算问题。
最后,根据输入过夜/不过夜的情况,处理不同的一小时之内的区间的对局数
然后处理不同小时之间的对局数问题,这个较简单,计算方式为:小时之差
×
4
\times 4
×4
最后将两部分相加得到输出。
附上代码:
class Solution {
public:
int check(int srt, int end){
srt = ceil(srt/15.0);
end = floor(end/15.0);
return max(end - srt, 0);
}
int numberOfRounds(string startTime, string finishTime) {
int round = 0;
int s1 = stoi(startTime.substr(0, 2)), s2 = stoi(startTime.substr(3));
int f1 = stoi(finishTime.substr(0, 2)), f2 = stoi(finishTime.substr(3));
bool overnight = false;
if(f1 < s1 || (f1 == s1 && f2 < s2)) overnight = true;
if(overnight) {
round += check(0, f2);
round += check(s2, 60);
round += 4 * (24 - s1 + f1 - 1);
} else {
if(f1 == s1) round += check(s2, f2);
else {
round += check(s2, 60);
round += check(00, f2);
round += 4 * (f1 - s1 - 1);
}
}
return round;
}
};