大家好,欢迎来到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