题目地址:
https://leetcode.com/problems/number-of-days-between-two-dates/
给定两个日期,年的范围是
[
1971
,
2100
]
[1971,2100]
[1971,2100],问两个日期之间隔了多少天。日期以YY-MM-DD
形式给出。
代码如下:
class Solution {
public:
int daysBetweenDates(string date1, string date2) {
return abs(calc(date1) - calc(date2));
}
#define is_leap(x) (x % 100 && x % 4 == 0 || x % 400 == 0)
int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int calc(string date) {
int year, month, day;
sscanf(date.c_str(), "%d-%d-%d", &year, &month, &day);
int res = 0;
for (int i = 1971; i < year; i++) res += 365 + is_leap(i);
for (int i = 1; i < month; i++) {
res += days[i];
if (i == 2) res += is_leap(year);
}
return res + day;
}
};
时空复杂度 O ( y + m ) O(y+m) O(y+m), y y y和 m m m分别代表年和月,空间 O ( 1 ) O(1) O(1)。