通过万岁!!!
- 题目:给定一个日期,返回是周几
- 思路:java中有方法的,直接使用,是先将日期转成Date,但是这个题不允许好像,因为需要用到SimpleDateFormat对象。还有一种方法,就是查看举例最开始的一天有多少天,然后对7取余即可。1970 年 12 月 31 日是星期四。
- 技巧:
- 数组用来存储多少天,以及每月多少天。
- 注意,还需要判断多少个闰年。
- 以及这里面有取余的过程,还是需要额外注意的,这个再周期性题目中还是挺关键的。
伪代码
先定义两个数组,一个是月份对应的天数,一个是星期日-星期一。 判断有多少完整year-1971,然后乘365 然后循环计算多少个月贡献了多少天,注意这里不能到month,因为这个月没有过完。 计算这个月的多少天,也就是day。 然后计算有多少闰年,从1971开始 判断我们要求的这个是不是闰年,因为我们的月份数组中2月写的是28天,如果本年是闰年,并且月份已经过了2月,那么就需要再加1 最后我们算出的天数,是从星期五开始的,所以我们要加3(这样才能到星期四的位置)再对7取余。
java代码
class Solution { public String dayOfTheWeek(int day, int month, int year) { String[] weeks = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; int[] monthToDay = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 年 int days = 365 * (year - 1971);// 多少个365 // 月 for (int i = 0; i < month - 1; i++) {// 这里month需要-1,因为当前月份没有过完 days += monthToDay[i]; } // 日 days += day; // 闰年 for (int i = 1971; i < year; i++) { if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) { days++; } } if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) { days++; } return weeks[(days + 3) % 7]; } }
- 总结:题目不难,这个取余的方法,还是挺关键的。这里还可以改进,就是月份数组其实不用写12月的,因为用不到。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)