2023.12.30力扣每日一题——一周中的第几天

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,需要天数加1
        if((year%400==0||(year%4==0&&year%100!=0))&&month>2){
            days+=1;
        }
        //计算日的贡献
        days+=day;
        return res[(days+3)%7];
    }

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈~

你可能感兴趣的:(java,力扣每日一题,leetcode,算法,职场和发展)