LeetCode - 1185 - 一周中的第几天 - java - 细喔

题目

在这里插入图片描述


题目大意

题目表达出的意思很明显:就是给你日期,让我们计算出这个日期对应的是星期几。


解题思路

首先要知道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];
    }
}

在这里插入图片描述

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor,可以在编辑器选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dark And Grey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值