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

2024-01-01 19:03:17

题目来源

力扣每日一题;题序: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];
    }

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

文章来源:https://blog.csdn.net/weixin_42075274/article/details/135326549
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。