每日一题17:1185. 一周中的第几天

题目描述

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。

示例 1:
输入:day = 31, month = 8, year = 2019
输出:"Saturday"

示例 2:
输入:day = 18, month = 7, year = 1999
输出:"Sunday"

示例 3:
输入:day = 15, month = 8, year = 1993
输出:"Sunday"

提示:
给出的日期一定是在 1971 到 2100 年之间的有效日期。

题解

本题可以用模拟方法做,也可以用蔡勒公式

class Solution {
    public String dayOfTheWeek(int day, int month, int year) {
        String[] week = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        int[] monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
        /* 输入年份之前的年份的天数贡献 */
        int days = 365 * (year - 1971) + (year - 1969) / 4;
        /* 输入年份中,输入月份之前的月份的天数贡献 */
        for (int i = 0; i < month - 1; ++i) {
            days += monthDays[i];
        }
        if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) {
            days += 1;
        }
        /* 输入月份中的天数贡献 */
        days += day;
        return week[(days + 3) % 7];
    }
   //蔡勒公式 
   //public String dayOfTheWeek(int day, int month, int year) {
    //   //注意开始是周六!
    //      String week[] = {  "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday","Saturday"} ;
    //      int m ,y;
     //    if (month < 3) {
     //        m = month + 12;
     //        y = year - 1;
      //   } else {
      //       m = month;
      //      y = year;
       //  }
       //  int index = 0 ;
        // //蔡勒公式 
       //  int c = y/100;
        // y %= 100;
       //  int D = c/4 - 2*c + y + y/4 + 13*(m+1)/5 + day - 1 + 210;//加上30*7防止出现负数
         //return week[D%7] ;
    // }
}

总结

这个是简单题目,跟1154 一年中的第几天类似,不过这个可以用蔡勒公式
算法总结:
1、蔡勒公式
2、闰年计算方式

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容