【力扣】简单的一周中的第几天问题

【力扣】简单的一周中的第几天问题来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/day-of-the-week给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month和 year,分别表示日、月、年。您返回的结果必须是这几

大家好,欢迎来到IT知识分享网。【力扣】简单的一周中的第几天问题"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/day-of-the-week

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数:day、month 和 year,分别表示日、月、年。

您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。

输入的年份范围在1971年到2100年

我的code:

 1 class Solution:
 2     def dayOfTheWeek(day, month, year):
 3         week = ['Friday','Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday']
 4         months_ping = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 5         months_run = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 6         counts = 0
 7         for i in range(year - 1971):
 8             if ((1971 + i) % 4 == 0 and (1971 + i) % 100 != 0) or (1971 + i) % 400 == 0:
 9                 counts = counts + 366
10             else:
11                 counts = counts + 365
12 
13         for j in range(month - 1):
14             if (year % 4 == 0 and year % 100 != 0) or (year % 400) == 0:
15                 counts = counts + months_run[j]
16             else:
17                 counts = counts + months_ping[j]
18         counts = counts + day -1
19         #计算出的总天数需要减去1
20         a = counts % 7
21         return week[a]

大体思路比较简单,得到给出的年月日减去起始的1971年1月1日,中间间隔的天数对7求余数就能得到当日对应的星期数。

要注意的几个点:

1)1971年1月1日是周五,所以我们默认输入1971年1月1日能和week列表中项对应的上,因此调换了顺序,当然了也可以做其他加减法处理不难;

2)注意判断闰年的特殊情况,年份为闰年的条件(1.年份能被4整除,但同时不能被100整除的年份为闰年;2.年份能被400整除的年份为闰年)

3)全部天数按加法计算得出后需要减一;

举个例子,我们要计算1971年1月2日是周几,显然因为1971年1月1日为周五,所以2日为周六。

如果我们不设置-1。直接跳过两个for循环执行counts = day = 2,对应列表的第三项显然我们需要减去1,使最终的counts%7对应我们定义的week列表

附上相同思路的别人的代码学习一下人家的语句,更优美

 1 class Solution:
 2     def dayOfTheWeek(self, day: int, month: int, year: int) -> str:
 3         # 1971年1月1日为星期五
 4         res = ["Friday", "Saturday","Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"]
 5         # 后续算时间需要减掉1天,故置为-1
 6         days = -1
 7         for y in range(1971,year):
 8             if self.isLeapYear(y):
 9                 days += 366
10             else:
11                 days += 365
12         for m in range(1,month):
13             if m == 2:
14                 if self.isLeapYear(year):
15                     days += 29
16                 else:
17                     days += 28
18             elif m in [1,3,5,7,8,10,12]:
19                 days += 31
20             else:
21                 days += 30
22         days += day
23         return res[days%7]
24     def isLeapYear(self,year):
25         if year % 400 == 0: return True
26         if year % 4 == 0 and year % 100 != 0: return True
27         return False
28 
29 作者:twzcxx1
30 链接:https://leetcode-cn.com/problems/day-of-the-week/solution/jian-dan-si-lu-ji-suan-dang-qian-ri-qi-ju-chi-1971/
31 来源:力扣(LeetCode)

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31405.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信