力扣题目链接:https://leetcode.cn/problems/day-of-the-year/
给你一个字符串?date
,按 YYYY-MM-DD
格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。
?
示例 1:
输入:date = "2019-01-09" 输出:9 解释:给定日期是2019年的第九天。
示例 2:
输入:date = "2019-02-10" 输出:41
?
提示:
date.length == 10
date[4] == date[7] == '-'
,其他的?date[i]
?都是数字date
表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日首先明确一年中的12个月分别有几天(以非闰年为例):dayOfMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
。
如果是闰年,那么2
月有29
天(dayOfMonth[1] = 29
)。
怎么判断一年是否为闰年呢?
从给定字符串中,我们可以很方便地“分离出”年y
月m
日d
,从1
月到m - 1
月累加这个月的天数,再加上d
即为答案。
12
个月视为常数class Solution {
private:
int dayOfMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool isRunNian(int y) {
if (y % 100 == 0) {
return y % 400 == 0;
}
return y % 4 == 0;
}
public:
int dayOfYear(string date) {
int y, m, d;
sscanf(date.c_str(), "%d-%d-%d", &y, &m, &d);
if (isRunNian(y)) {
dayOfMonth[1] = 29;
}
int ans = 0;
for (int i = 1; i < m; i++) {
ans += dayOfMonth[i - 1];
}
ans += d;
return ans;
}
};
class Solution:
def ifRunNian(self, y: int) -> bool:
if y % 100 == 0:
return y % 400 == 0
return y % 4 == 0
def dayOfYear(self, date: str) -> int:
dayOfMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
y, m, d = map(int, date.split('-'))
if self.ifRunNian(y):
dayOfMonth[1] = 29
ans = 0
for i in range(1, m):
ans += dayOfMonth[i - 1]
ans += d
return ans
同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/135315004