概述
零、写在前面
????博主简介:大家好,我是MUSE,一个正在成长的Python博主小白!
????博客主页:倒霉沙拉????
???? 欢迎关注????点赞????评论✉️收藏????
????系列介绍:本系列采用Python语言解决算法零基础100讲题目,相关文章可以关注专栏!
目录
- 零、写在前面
- 一、基础知识
- 二、题目解析
- 1.一周中的第几天(1185)
- 2.一年中的第几天(1154)
- 3.日期之间隔几天(1360)
- 三、写在后面
一、基础知识
1.闰年定义
2.闰年计算
3.代码实现
def isLeapYear(self,year):
if year%400==0:
return True
if year%4==0 and year%100!=0:
return False
这个代码也是在之后的题目中判断闰年的重要方法。
二、题目解析
1.一周中的第几天(1185)
class Solution:
def dayOfTheWeek(self,day:int,month:int,year:int)->str:
res=["Friday","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday"]
days=-1
for y in range(1971,year):
if self.isLeapYear(y):
days+=366
else:
days+=365
for m in range(1,m):
if m==2:
if self.isLeapYear(year):
days+=29
else:
days+=28
elif m in [1,3,5,7,8,10,12]:
days+=31
else:
days+=30
days+=day
ans=days%7
return res[ans]
def isLeapYear(self,year):
if year%400==0:
return True
if year%4==0 and year%100!=0:
return False
✅解题思路:
1)我采用了一个最简单直接的思路去求解这道题目;
2)因为题目中规定了年份的范围是[1971,2100],那么我们通过对给定的日期换算成天数对7求余,但是因为1971年1月1日是星期五,我们需要对给定的星期列表做一个改变,代码如上;
3)之后我们对年月日遍历添加,将求出的和对7求余,返回即可。
2.一年中的第几天(1154)
class Solution:
def dayOfYear(self,date:str)->int:
year=int(date[0:4])
month=int(date[5:7])
day=int(date[8:])
days=0
if self.isLeapYear(year):
for m in range(1,month):
if m==2:
days+=29
elif m in [1,3,5,7,8,10,12]:
days+=31
else:
days+=30
else:
for m in range(1,month):
if m==2:
days+=28
elif m in [1,3,5,7,8,10,12]:
days+=31
else:
days+=30
days+=day
return days
def isLeapYear(self,year):
if year%400==0:
return True
if year%4==0 and year%100!=0:
return False
✅解题思路:
1)基本思路与上题类似;
2)利用字符串遍历对应位置的值,依次遍历求和,需要注意闰年对2月份天数的影响,和上题一样,大家可以对比学习一下。
3.日期之间隔几天(1360)
class Solution:
def leap_year(self, year):
return (year % 400 == 0) or (year % 100 != 0 and year % 4 == 0)
def date_to_int(self, year, month, day):
ans = 0
month_length = [31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]
while year != 1971 or month != 1 or day != 1:
ans += 1
day -= 1
if day == 0:
month -= 1
day = month_length[month]
if month == 2 and self.leap_year(year):
day += 1
if month == 0:
year -= 1
month = 12
return ans
def daysBetweenDates(self, date1: str, date2: str) -> int:
date1 = [int(i) for i in date1.split('-')]
date2 = [int(i) for i in date2.split('-')]
return abs(self.date_to_int(*date1) - self.date_to_int(*date2))
✅解题思路:
由于题目中的日期不会早于 1971 年,我们可以将两个日期转化为距离 1971 年 1 月 1日的天数。这一转化过程可以直接暴力求解:从当前日期开始,一天一天递减,直到 1971 年 1 月 1 日为止。
三、写在后面
今天的题目是关于闰年的判断利用在日期计算中的,大家可能会感觉代码比较长,因为我采用的是最简单的思路,大家一看就能懂得,除此之外呢,看起来代码很长,但其实代码的结构与思路还是有相似的地方的,所以也没有那么难!
对你有帮助的话,点个赞再走吧,你的反馈将是我最大的动力!
最后
以上就是紧张御姐为你收集整理的【算法零基础100讲题解】第六讲 日期算法——基于Python语言零、写在前面一、基础知识二、题目解析三、写在后面的全部内容,希望文章能够帮你解决【算法零基础100讲题解】第六讲 日期算法——基于Python语言零、写在前面一、基础知识二、题目解析三、写在后面所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复