当前位置: 代码迷 >> 综合 >> LeetCode刷题NO.1154——一年中的第几天
  详细解决方案

LeetCode刷题NO.1154——一年中的第几天

热度:114   发布时间:2023-11-20 23:59:48.0

来源:力扣(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。

  1. date按照字符“-”进行切分,获取该日期的年月日yearmonth以及day,并转化为int
  2. 定义一个列表days,用来存放平年每个月对应的天数
  3. 定义num用来计算该日期是这一年中的第几天,并初始化为day
  4. month之前月份的天数累加到num,此时num的值为按平年算该日期对应的天数
  5. 判断month是否大于2(只有为闰年并且月份大于2时天数才需要加1),并且该年是否为闰年,如果是,则num+1
  6. 此时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

【运行结果】
在这里插入图片描述