该题解首先定义了一个列表 `calendar`,该列表以0开始,接着是每个月的天数,不考虑闰年的2月份。接着,通过字符串分割,将输入日期的年、月、日提取出来并转换为整数。累加到目前月份之前所有月份的天数得到 `d`。如果当前年份是闰年并且日期在2月之后,额外加一天。判断闰年的条件是:年份能被4整除但不能被100整除,或者能被400整除。最后返回从年初到当前日期的总天数。
时间复杂度: O(1)
空间复杂度: O(1)
#
# @lc app=leetcode id=1154 lang=python3
#
# [1154] Day of the Year
#
class Solution:
def dayOfYear(self, date: str) -> int:
# 初始化每月的天数,2月默认为非闰年的28天
calendar = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 分割日期字符串并转换为整数
y, m, d = map(int, date.split('-'))
# 累加到当前月份之前的所有月份的天数
d += sum(calendar[:m])
# 检查是否为闰年,如果是且月份大于2月,则加一天
if ((y % 100 and not y % 4) or (not y % 100 and not y % 400)) and m > 2:
d += 1
# 返回年初至当前日期的天数总和
return d