【力扣时间】【1185】【简单】一周中的第几天

写在最开始,这题很值得人吐槽一下……

1、先看题

在这

题目也很清楚明了,再加上是简单题,所以我也没有多想,直接就用java api上了。

    public String dayOfTheWeek(int day, int month, int year) {
        LocalDate time = LocalDate.of(year, month, day);
        return time.getDayOfWeek().toString();
    }

可以说,这入参就是为了LocalDate 类设计的,心满意足点了提交,结果……
在这里插入图片描述
丫的,原来LocalDate也不让用的吗?
前些天做的一年中的第几天时,我看题解有人提到,所以是这类复杂的工具类都不让用吗?

然后我就懵逼了。
要知道,求一年中的第几天的话是很容易的,毕竟第一天就是第一天,第二天就是第二天。
但是求星期就完全不一样了,毕竟你不知道第一天是星期几啊!

我冥思苦想,但完全想不出除了api外的其他法子。
于是投降去看了下官解。

在这里插入图片描述

就NM离谱!这又不是常识!能不能放到题干里啊!
你家日历挂到1970年的日期的吗?
你面试时能够和面试官说:稍等我查下日历 的吗?

差评!

2、思路

好吧,如果有对照的话,这题又简单回来了。
基本上是在一年中的第几天这题的基础上改改就可以。

只要知道输入的日期距离1970年12月31日有多少天的话,就可以得知该天是周几了。

开始吧。

3、动手

public String dayOfTheWeek(int day, int month, int year) {
        String[] weekName = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        int[] DaysOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
        int sum = 0;

        //计算当前年份和1971年间的日期差(仅到当前年份前一年)
        for (int i = 1971; i < year; i++) {
            sum += 365;
            //遇上闰年+1
            if (isLeapYear(i)) {
                sum++;
            }
        }
        //计算当月前的天数
        for (int i = 0; i < month - 1; i++) {
            sum += DaysOfMonth[i];

            //如果当前年份是闰年,记得2月要多一天
            if (i == 1 && isLeapYear(year)) {
                sum++;
            }
        }

        //加上日期
        sum += day;

        //日期+3再对7取余,得到一周的第几天
        return weekName[(sum + 3) % 7];
    }

    /**
     * 判断闰年的条件:
     * 为400的整数倍,或为4但不为100的整数倍
     *
     * @param year 年份
     * @return 是否为闰年
     */
    private boolean isLeapYear(int year) {
        return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    }

关于闰年的判断依旧是直接照搬之前的。
其余的也没啥可讲的

4、提交

在这里插入图片描述

5、再看看大牛

本以为今天也没啥看头的,但大牛永远是大牛,简单题依旧玩出花来

来看看小白大牛的四种解法。您要是小白辣我这种就渣都不剩了啊
前两种还算是中规中矩,后两种数学公式一出,直接亮瞎我的狗眼。

大家看着学习吧……

6、总结

啊……假期要没了……

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值