1185. Day of the Week

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
private static final int[] DAYS_PER_MONTH = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
private static final String[] DAY_OF_THE_WEEK = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

public String dayOfTheWeek(int day, int month, int year) {
int resultDay = 4; // start from 1970-12-31, this day is Thursday

for (int i = 1971; i < year; i++) {
resultDay += isLeapYear(i) ? 366 : 365; // 注意此处是 i
}
for (int i = 1; i < month; i++) {
resultDay += DAYS_PER_MONTH[i];
if (i == 2 && isLeapYear(year)) {
resultDay += 1;
}
}
resultDay += day;

return DAY_OF_THE_WEEK[resultDay % 7];
}

private boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
}

References

1185. Day of the Week