LeetCode——1185.一周中的第几天

通过万岁!!!

  • 题目:给定一个日期,返回是周几
  • 思路: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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值