来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/day-of-the-year
【题目描述】
给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。请你计算并返回该日期是当年的第几天。
通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。
【示例】
示例 1:
输入:date = "2019-01-09"
输出:9
示例 2:
输入:date = "2019-02-10"
输出:41
示例 3:
输入:date = "2003-03-01"
输出:60
示例 4:
输入:date = "2004-03-01"
输出:61
提示:
- date.length == 10
- date[4] == date[7] == ‘-’,其他的 date[i] 都是数字
- date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日
【解题思路】
年份有平年和闰年之分,所以不能用同一套规则进行判断。但是可以先按照平年的天数算,然后通过判断该年是否为闰年以及月份是否大于2,再决定是否在原有的天数上加1。
- 把
date
按照字符“-”
进行切分,获取该日期的年月日year
,month
以及day
,并转化为int
型 - 定义一个列表
days
,用来存放平年每个月对应的天数 - 定义
num
用来计算该日期是这一年中的第几天,并初始化为day
- 把
month
之前月份的天数累加到num
,此时num
的值为按平年算该日期对应的天数 - 判断
month是否大于2
(只有为闰年并且月份大于2时天数才需要加1),并且该年是否为闰年
,如果是,则num+1
- 此时
num
即为日期date
在年份year
中的第几天,故返回num
【提交代码】
class Solution:def dayOfYear(self, date: str) -> int:# 获取年月日year, month, day = date.split("-")year, month, day = int(year), int(month), int(day)# 计算该日期是平年中的第几天num = daydays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]for i in range(month-1):num += days[i]# 月份大于2且为闰年时,天数加1if month>2 and (year%4==0 and year%100!=0 or year%400==0):num +=1return num
【运行结果】