文章目录
- 题目
- 题目大意
- 解题思路
- 代码如下
- 代码细节
- 细节一
- 细节二
- 代码二(这个就不讲了,跟上一个代码差不多):
题目
?
题目大意
首先要知道1971年第一天是星期几,
通过查询日历得知 1971年第一天(1月1日)是星期五,【1970.12.31 为 星期四】
有人可能会有疑问:求这个第一天星期几,有什么意义?
你这幺想 题目会给我们一个日期,其目的:是想让我们算出 所给 日期 是星期几,
日期范围:1971 ~ 2100年
重点就来了:既然知道了 日期底线:1971【准确来说是 1970.12.31】,那么,我可不可以这幺去想,我先去得到底线日期是星期几,之后的天数就网上累加,每累加一次,星期加一,没问题吧?
由此引出我们解题的关键:我们只要计算 所给出年份 与底线 相差多少天,然后,把它加在底线的基础上,就可以得出我们的最终结果,
举个例子:
既然题目规定回传值 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”},
那么,我们就需要为回传值创建一个 字符阵列,来存盘回传值,到时候,根据结果回传对应的值,
假设这个阵列为: String[] week = {“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”,“Sunday”};
然后,我们再 创建一个 days 来 记录 给出年份与底线 相差多少天,
假设 days 的结果为 1,即 year == 1971,mont == 1,day == 1,对应日期:星期五,
此时要回传值 就是星期五,再加上星期阵列week,
那么回传:return week[(days + 3) % 7] ;理由如下:
当然,还有一些细节部分: 计算出所给日期 与底线的相差多少天,我们就需要考虑 所给日期 与 底线 中 有几个闰年,闰年比普通年份多出一天(2月多出的),这一点请记住,
?
代码如下
class Solution {
public String dayOfTheWeek(int day, int month, int year) {
String[] week = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"};
// 1 ~ 11 月的天数
int[] monthDay = {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 += monthDay[i];
}
if( (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) && month >2){
days += 1;// 如果 日期年 是闰年,且日期月份 大于 2月,所以它的天数要加1
}
days += day;// 再加上日期月份零碎的几天
return week[(days+3) % 7];
}
}
?
代码细节
细节一
细节二
?
代码二(这个就不讲了,跟上一个代码差不多):
class Solution {
public String dayOfTheWeek(int day, int month, int year) {
String[] week = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int[] monthDay = {31,28,31,30,31,30,31,31,30,31,30};
int days = 4;// 底线日期,对应星期四,下标也是 4
for(int i = 1971; i < year; i++){// 计算 日期年份 与 底线年份的天数差
boolean leap = i%400 == 0 || (i % 4 == 0 && i % 100 !=0);// 润年为 true,平年为 false
days += leap ? 366 :365;// 闰年 366天,平年 365天
}
for(int i = 0;i < month-1;i++){
days += monthDay[i];
if(i == 2 && (year % 400 == 0 || year % 4 == 0 && year % 100 !=0)){
days += 1;// 如果给定年份year 为闰年,且经历过2月,需要加一天,
}
}
days += day;
return week[days % 7];
}
}
0 评论