2023.12.30
- 题目来源
- 我的题解
- 方法一 模拟+常识
题目来源
力扣每日一题;题序:1185
我的题解
方法一 模拟+常识
首先想要计算指定日期是周几,需要一个参考日期,这里选择1970年12月31日,查询日历可知该天是星期四,之后给定的日期只需要计算与距离 1970 年 12 月 31 日有几天,再加上 3 后对 7 求余,即可得到输入日期是一周中的第几天。
具体的距离天数计算:
(1)输入年份之前的年份的天数贡献(注意闰年);
(2)输入年份中,输入月份之前的月份的天数贡献(注意超过2月也需要考虑闰年);
(3)输入月份中的天数贡献。
时间复杂度:O(m)。月份数
空间复杂度:O(m)。存储每个月的天数
public String dayOfTheWeek(int day, int month, int year) {String[] res={"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};int[] monthDays={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};//计算年的贡献 即year-1971 (year-1969)/4是求这些年中有多少是闰年int days=365*(year-1971)+(year-1969)/4;//计算月的贡献for(int i=0;i<month-1;i++){days+=monthDays[i];}//若所求年份刚好是闰年并且月份大于2,需要天数加1if((year%400==0||(year%4==0&&year%100!=0))&&month>2){days+=1;}//计算日的贡献days+=day;return res[(days+3)%7];}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~