首先想要计算指定日期是周几,需要一个参考日期,这里选择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,需要天数加1
if((year%400==0||(year%4==0&&year%100!=0))&&month>2){
days+=1;
}
//计算日的贡献
days+=day;
return res[(days+3)%7];
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~