给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数: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
年之间的有效日期。
我们可以使用蔡勒公式来计算星期几,蔡勒公式如下:
其中:
w
: 星期(从 Sunday 开始)c
: 年份前两位y
: 年份后两位m
: 月(m 的取值范围是 3 至 14,即在蔡勒公式中,某年的 1、2 月要看作上一年的 13、14 月来计算,比如 2003 年 1 月 1 日要看作 2002 年的 13 月 1 日来计算)d
: 日⌊⌋
: 向下取整mod
: 取余
时间复杂度
class Solution:
def dayOfTheWeek(self, day: int, month: int, year: int) -> str:
return datetime.date(year, month, day).strftime('%A')
import java.util.Calendar;
class Solution {
private static final String[] WEEK
= {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
public static String dayOfTheWeek(int day, int month, int year) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day);
return WEEK[calendar.get(Calendar.DAY_OF_WEEK) - 1];
}
}
class Solution {
public:
string dayOfTheWeek(int d, int m, int y) {
if (m < 3) {
m += 12;
y -= 1;
}
int c = y / 100;
y %= 100;
int w = (c / 4 - 2 * c + y + y / 4 + 13 * (m + 1) / 5 + d - 1) % 7;
vector<string> weeks = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
return weeks[(w + 7) % 7];
}
};
func dayOfTheWeek(d int, m int, y int) string {
if m < 3 {
m += 12
y -= 1
}
c := y / 100
y %= 100
w := (c/4 - 2*c + y + y/4 + 13*(m+1)/5 + d - 1) % 7
weeks := []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
return weeks[(w+7)%7]
}
function dayOfTheWeek(d: number, m: number, y: number): string {
if (m < 3) {
m += 12;
y -= 1;
}
const c: number = (y / 100) | 0;
y %= 100;
const w = (((c / 4) | 0) - 2 * c + y + ((y / 4) | 0) + (((13 * (m + 1)) / 5) | 0) + d - 1) % 7;
const weeks: string[] = [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
];
return weeks[(w + 7) % 7];
}
class Solution:
def dayOfTheWeek(self, d: int, m: int, y: int) -> str:
if m < 3:
m += 12
y -= 1
c = y // 100
y = y % 100
w = (c // 4 - 2 * c + y + y // 4 + 13 * (m + 1) // 5 + d - 1) % 7
return [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
][w]
class Solution {
public String dayOfTheWeek(int d, int m, int y) {
if (m < 3) {
m += 12;
y -= 1;
}
int c = y / 100;
y %= 100;
int w = (c / 4 - 2 * c + y + y / 4 + 13 * (m + 1) / 5 + d - 1) % 7;
return new String[] {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday"}[(w + 7) % 7];
}
}