一周中的第几天(LeetCode日记)
2023-12-30 15:25:22
LeetCode-1185-一周中的第几天
题目信息:
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day
、month
和 year
,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
。
- 示例1:
输入:day = 31, month = 8, year = 2019
输出:“Saturday”
- 示例2:
输入:day = 18, month = 7, year = 1999
输出:“Sunday”
- 示例3:
输入:day = 15, month = 8, year = 1993
输出:“Sunday”
提示:
- 给出的日期一定是在
1971
到2100
年之间的有效日期。
相关标签 :数学
题解
首先祝大家元旦节假期,玩的开心!
今天的问题属于简单难度,属于是大多数人的编程白月光了。虽然很简单,但是我还是觉得有必要出个题解给大家瞧瞧,毕竟还是有很多初入编程的朋友们的。
方法:模拟
题目规定输入的日期一定是在 1971 到 2100 年之间的有效日期,即在 1971 年 1 月 1 日,到 2100 年 12 月 31 日之间。通过查询日历可知,1970 年 12 月 31 日是星期四,我们只需要算出输入的日期距离 1970 年 12 月 31 日有几天,再加上 3 后对 7 求余,即可得到输入日期是一周中的第几天。
求输入的日期距离 1970 年 12 月 31 日的天数,可以分为三部分分别计算后求和:
- 输入年份之前的年份的天数贡献;
- 输入年份中,输入月份之前的月份的天数贡献;
- 输入月份中的天数贡献。
其中(1)和(2)部分的计算需要考虑到闰年的影响。当年份是 400 的倍数或者是 4 的倍数且不是 100 的倍数时,该年会在二月份多出一天。
实现代码(Python)
class Solution:
def dayOfTheWeek(self, day: int, month: int, year: int) -> str:
weekdayStr = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] # 数字与天数字符串的映射
daysBeforeMonth = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] # 每个月之前的总天数,如2月之前的总天数=daysBeforeMonth[1]
days = 365 * (year - 1971) + (year - 1969) // 4 + daysBeforeMonth[month - 1] + day # 计算总天数
if (year % 400 == 0 or year % 4 == 0 and year % 100 != 0) and month >= 3: days += 1 # 当前年是闰年且月份大于2,天数多加一天
return weekdayStr[(4 + days) % 7] # 根据总天数偏移计算实际偏移量
题记:
- 研究生在读,我会尽量保持LeetCode每日一题的思路和代码输出。希望大家多多支持。
- 水平有限,希望各位大佬能够批评指正。您的教诲是我进步的船帆。
- 希望各位跟我一样的小白能跟我一起参与到做题和讨论中来。共同进步是我所能期盼的最高愿想。
- 您的点赞和关注是我坚持分享的动力泉源,希望能将这件简单平凡的事一直做下去。感谢大家。
文章来源:https://blog.csdn.net/weixin_52242569/article/details/135304984
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!