当前位置:   article > 正文

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];
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/45300
推荐阅读
相关标签