LeetCode #1185 Day of the Week 一周中的第几天

1185 Day of the Week 一周中的第几天

Description:
Given a date, return the corresponding day of the week for that date.

The input is given as three integers representing the day, month and year respectively.

Return the answer as one of the following values {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}.

Example:

Example 1:

Input: day = 31, month = 8, year = 2019
Output: "Saturday"

Example 2:

Input: day = 18, month = 7, year = 1999
Output: "Sunday"

Example 3:

Input: day = 15, month = 8, year = 1993
Output: "Sunday"

Constraints:

The given dates are valid dates between the years 1971 and 2100.

题目描述:
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数: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 年之间的有效日期。

思路:

  1. 以某时间作为参考, 计算出所给时间与标准的天数的差值, 然后对 7取模即可
  2. 蔡勒公式
    时间复杂度O(1), 空间复杂度O(1)

代码:
C++:

class Solution 
{
public:
    string dayOfTheWeek(int day, int month, int year) 
    {
        int y = 1971, d = 0, m = 0, result = 0, count[12] ={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        for (; y < year; y++)
        {
            if ((!(y % 4) && y % 100) || !(y % 400)) result +=366;
            else result +=365;
        }
        if ((!(y % 4) && y % 100) || !(y % 400)) count[1] = 29;
        for (; d < month - 1; d++) result += count[d];
        result += day - 1;
        vector<string> week = {"Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"};
        return week[result % 7];
    }
};

Java:

class Solution {
    public String dayOfTheWeek(int day, int month, int year) {
        int benchmark[] = new int[]{0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
        String week[] = new String[]{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
        if (month < 3) --year;
        return week[(year + year / 4 - year / 100 + year / 400 + benchmark[month - 1] + day) % 7];
    }
}

Python:

class Solution:
    def dayOfTheWeek(self, day: int, month: int, year: int) -> str:
        return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][(year + year // 4 - year // 100 + year // 400 + [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4][month - 1] + day) % 7] if month > 2 else ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][((year - 1) + (year - 1) // 4 - (year - 1) // 100 + (year - 1) // 400 + [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4][month - 1] + day) % 7];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容