目录结构
1.题目
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。
示例:
输入:day = 31, month = 8, year = 2019
输出:"Saturday"
输入:day = 18, month = 7, year = 1999
输出:"Sunday"
输入:day = 15, month = 8, year = 1993
输出:"Sunday"
提示:
- 给出的日期一定是在
1971
到2100
年之间的有效日期。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/day-of-the-week
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.题解
以【1971-01-01 Friday】为基准,计算天数(注意闰年为366天,其中2月有29天),然后取余判定。
public class Solution1185 {
@Test
public void test1185() {
int day = 18, month = 7, year = 1999;
System.out.println(dayOfTheWeek(day, month, year));
}
//1971-01-01 Friday
public String dayOfTheWeek(int day, int month, int year) {
String[] date = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int[] days = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
int count = 0;
for (int i = 1971; i < year; i++) {
count += 365;
if ((i % 100 == 0 && i % 400 == 0) || (i % 100 != 0 && i % 4 == 0)) {
count++;
}
}
count += days[month - 1] + day;
if (month > 2) {
if ((year % 100 == 0 && year % 400 == 0) || (year % 100 != 0 && year % 4 == 0)) {
count++;
}
}
return date[(4 + count) % 7];
}
}