1118. 一月有多少天
大约 2 分钟
---
1118. 一月有多少天
- 标签:数学
- 难度:简单
题目链接
题目大意
描述:给定年份 和月份 。
要求:返回该月的天数。
说明:
- 。
- 。
示例:
- 示例 1:
输入:year = 1992, month = 7
输出:31- 示例 2:
输入:year = 2000, month = 2
输出:29解题思路
思路 1:直接模拟
每月天数规律(可以靠拳头记忆法:拳头凸起的地方是 31 天,凹陷处是 30 天, 月单独记):
- 31 天的月份:、、、、、、 月
- 30 天的月份:、、、 月
- 月:闰年 天,平年 天
闰年判断规则(两个条件满足一个就是闰年):
- 能被 整除
- 能被 整除,但不能被 整除
拆解步骤:
- 用一个数组存好每个月对应的天数(按平年算, 月先写 )。
- 判断今年是不是闰年。
- 如果是闰年且是 月,返回 ;否则直接从数组里取天数。
思路 1:代码
class Solution:
def numberOfDays(self, year: int, month: int) -> int:
# 平年每个月的天数,days[1] 对应 1 月,days[2] 对应 2 月……
days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 判断闰年:能被 400 整除,或者能被 4 整除但不能被 100 整除
is_leap = (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)
# 闰年 2 月有 29 天
if month == 2 and is_leap:
return 29
# 其他情况查表即可
return days[month]思路 1:复杂度分析
- 时间复杂度:。没有循环,只是几次判断和数组取值。
- 空间复杂度:。只用了常数个变量。