LeetCode.1185-一周中的星期几(Day of the Week)

[leetcode]日期问题 1154. Day of the Year Given a string date representing a Gregorian calendar date formatted as YYYY-MM-DD, return the day number of the year. Example 1: Input: date = “2019-01-09” Output: 9 Explanat... 阅读详情

这是小川的第415次更新,第448篇原创

看题和准备

今天介绍的是LeetCode算法题中Easy级别的第266题(顺位题号是1185)。给定日期,返回该日期的星期几。输入为三个整数,分别代表日,月和年。

以下列值之一返回答案:{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。

例如:

输入:day = 31, month = 8, year = 2019
输出:“Saturday”

输入:day = 18, month = 7, year = 1999
输出:“Sunday”

输入:day = 15, month = 8, year = 1993
输出:“Sunday”

约束:

  • 给定的日期是1971年至2100年之间的有效日期。

第一种解法

题目要求我们计算给定日期是星期几,直接调用Calendar类的API,如果是面试不建议这么做。

public String dayOfTheWeek(int day, int month, int year) {
    String[] week = {"Sunday", "Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday"};
    Calendar cal = Calendar.getInstance();
    cal.set(year, month-1, day);
    int i = cal.get(Calendar.DAY_OF_WEEK)-1;
    if (i<0) {
        i = 0;
    }
    return week[i];
}

第二种解法

第一步,先算出从1971年距离当前年份的前一年总共有多少天,平年加365天,闰年加366天。

第二步,再计算给的月份的前几个月的天数之和,闰年2月有29天。

第三步,再加上给的天数减去1天,因为题目给的示例中星期天是第一天。

第四步,将最后得到的天数再加上5天,因为1971年1月1日是星期五,然后对7取余。

public String dayOfTheWeek2(int day, int month, int year) {
    String[] week = {"Sunday", "Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday"};
    int[] dayOfMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
    int total = 0;
    for (int i=1971; i<year; i++) {
        if (i%4 == 0) {
            total++;
        }
        total += 365;
    }
    if (year%4 == 0) {
        dayOfMonth[1] = 29;
    }
    for (int j=0; j<month-1; j++) {
        total += dayOfMonth[j];
    }
    total += day - 1;
    return week[(total + 5)%7];
}

第三种解法

利用蔡勒公式来解。

w =  (c/4- 2*c + y + y/4 + 26*(m + 1)/10 + d - 1) % 7;
  • c:代表世纪,是年份的前两位,比如1971,c就为19。

  • y:是年份的后两位,比如1971,y就是71。

  • m:代表月,3<= m <= 14,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日,要看作2002年的13月1日来计算。

  • d:代表日。

  • w:计算结果,代表星期几。

有一点需要注意,利用蔡勒公式算出来的数,有可能为负数,因此需要加上7,再取余一次,才能当作索引去字符串数组里取值。

public String dayOfTheWeek3(int day, int month, int year) {
    String[] week = { "Sunday", "Monday", "Tuesday", 
            "Wednesday", "Thursday", "Friday", "Saturday" };
    //如果月份小于3月,则月份加12,年份减1
    if (month < 3) {
        month += 12;
        year -= 1;
    }
    int J = year / 100; // 世纪,年份前两位
    int K = year % 100; // 年份,年份后两位
    int h = (K + K / 4 + J / 4 - 2 * J +
             26 * (month + 1) / 10 + day - 1) % 7;
    // h算出来可能为负数,需要补7后再取一次余
    return week[(h + 7) % 7];
}

第四种解法

利用基姆拉尔森公式来计算。

Week = (Day + 2*Month + 3*(Month+1)/5 + Year + Year/4 - Year/100 + Year/400) % 7;

如果月份小于3月,则月份加12,年份减1。对于星期几,在基姆拉尔森公式里,星期一是排在第一位,星期天排在最后一位。

public String dayOfTheWeek4(int day, int month, int year) {
    String[] week = {"Monday", "Tuesday", "Wednesday", 
            "Thursday", "Friday", "Saturday", "Sunday"};
    if (month < 3) {
        month += 12;
        year -= 1;
    }
    int w = (day + 2*month + 3*(month+1)/5 + 
            year + year/4 - year/100 + year/400) % 7;
    return week[w];
}

小结

算法专题目前已更新LeetCode算法题文章272+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、在看就是对我最大的回报和支持!

LeetCode --- 1185. Day of the Week 解题报告 Given a date, return the corresponding day of the week for that date. The input is given as three integers representing theday,monthandyearrespectively. Return the answer as one of the following values{"Sunday", "Monday", "Tuesday", "Wednesday", "T... 阅读详情

相关推荐

Avalonia使用CefNet 实现web-browsers(基于CentOS8 Arm64架构)

Avalonia使用CefNet 实现web-browsers(基于CentOS8 Arm64架构)

confused_kitten的博客 3804

LeetCode算法题解 1185-一周中的第几天

题目描述 题解: 首先要明白知识点: 每年的第一天 不一定是星期一,刚开始我就是直接求出这一天是这年的第几天,然后去%7求星期数,但是一翻日历,发现2019年的第一天并不是星期一。 题目给出的提示给出的日期一定是在 1971 到 2100 年之间的有效日期。是有作用的,可以通过查资料(比如Excel啥的)得到1971年1月1日的星期数,然后求出给定的日期距离这一天多少天,比如1971 /1/1...

东瓜blog 444

基于Java的高校校园点餐系统

本文介绍了一个基于Java技术开发的高校校园点餐系统,该系统以B/S结构为基础,采用MySQL作为数据库,实现了一个高效、便捷的在线点餐平台。系统主要面向三类用户:管理员、用户和食堂工作人员,提供包括用户管理、食堂管理、菜单管理、订单管理等在内的多项功能。通过系统的具体测试,验证了其可行性和有效性,为高校师生提供了一个科学化、系统化的点餐服务。高校校园点餐系统的开发和实现,不仅提高了校园餐饮服务的效率和质量,也为师生提供了一个更加便捷的点餐体验。

a632341031的博客 841

计算任何一天是星期几的几种算法-ZT

转自 小鱼  近日在论坛上看到有人在问星期算法,特别整理了一下,这些算法都是从网上搜索而来,算法的实现是我在项目中写的。希望对大家有所帮助。一:常用公式  W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D  Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。二:蔡勒(Zeller)公式   w=

庖丁坊 2428

告别复杂配置:dbswitch vs 传统工具(Kettle/DataX)在Greenplum数据同步中的性能对比

本文深入对比了新兴工具dbswitch与传统ETL工具Kettle、DataX在Greenplum数据同步中的表现。重点分析了dbswitch如何通过免中间文件、利用二进制COPY协议等设计,在异构数据库同步场景下实现更优的性能和更简化的配置,为技术选型提供清晰参考。

transformer2023的博客 1050

LoRa无线通信技术介绍(六)SX127X芯片收发程序讲解

接收LORA芯片SX127X的收发程序。

DT程序员的博客 1752

python获取当前星期几_LeetCode基础算法题第166篇:1185. 给定一个日期求星期几

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。如果有任何问题可以在文章后评论或者私信给我。如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。持续分享,敬请关注。L...

weixin_39995108的博客 279

【知识分享】高速印刷电路板(PCB)寄生参数计算指南

对于高速PCB设计而言,寄生参数一直是令人讨厌的问题,它们会悄悄潜入PCB并在电路中造成严重的破坏,具体来说,它们是渗透到高速电路中的隐藏杂散电容器和电感器,包括由封装引线和长走线形成的电感器、PCB焊盘对金属平面形成的电容器、走线之间形成的电容器等等。

一只豌豆象的博客 1784

leetcode 1185. Day of the Week(python)

描述 Given a date, return the corresponding day of the week for that date. The input is given as three integers representing the day, month and year respectively. Return the answer as one of the following values {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “

王大呀呀的博客 379

Vue3 - 详解实现网站接入钉钉扫码登录功能,钉钉授权生成登录二维码用户用手机扫描二维码登陆,支持弹框式、浏览器单独新开页显示,钉钉扫描二维码登录详细流程及示例代码,最新vue集成钉钉扫码授权登录!

vue3,nuxt3,钉钉,扫码登录,vue3钉钉扫码登陆,钉钉授权第三方WEB网站扫码登录功能,钉钉扫码登录第三方网站,单点登录,二维码不显示,报错,扫了没反应,出错,vue3钉钉扫码登录,内嵌,获取个人信息,pc网页钉钉登录,钉钉扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描钉钉二维码登录网站,页面弹出一个小窗口而不是打开一个页面,vue3中使用iframe实现另开小窗口扫码登

🏆 前端领域优质创作者 3696

YOLOv11改进 - C3k2融合 | C3k2融合融合WDBB宽度多样分支模块(Width Diverse Branch Block)通过多尺度分支增强特征表征能力

本文着眼于灰度图像目标检测所面临的挑战,提出了增强型目标检测网络 YOLO - MIF,该网络整合了多种多信息融合策略以对 YOLOv8 网络进行改进。文章开篇介绍了一种可创建伪多通道灰度图像的技术,此技术能增加网络的通道信息,同时缓解潜在的图像噪声与虚焦模糊问题。随后运用网络结构重新参数化技术,在不增加推断时间的情况下提升网络的检测性能。此外,引入了一种新颖的解耦式检测头,增强了模型处理灰度图像时的表现能力。

魔改工程师的博客 771

【算法笔记】Day of Week

Day of Week 时间限制: 1 Sec内存限制: 32 MB 提交: 2252解决: 692 [提交][状态][讨论版][命题人:外部导入] 题目描述 We now use the Gregorian style of dating in Russia. The leap years are years with number divisible by 4 but not d...

逆风笑的博客 480

基于YOLOv8深度学习的夜视行人检测系统:UI界面 + YOLOv8 + 数据集的实现

为了解决这一问题,基于深度学习的行人检测技术,尤其是YOLO(You Only Look Once)系列算法,成为了一个有效的解决方案。本文将详细介绍如何构建一个夜视行人检测系统,利用YOLOv8模型实现高效的行人检测,并设计用户友好的界面以便于使用。本博客详细介绍了如何构建一个基于深度学习的夜视行人检测系统,包括数据准备、YOLOv8模型训练、用户界面设计和实时监控模块的实现。为了将数据集转换为YOLO格式,我们需要确保每个图像文件都有一个对应的标签文件,标签文件中包含行人的边界框信息。

YOLO 1172

【LeetCode系列】1185. 一周中的第几天

大家好!本篇文章将介绍力扣[1185. 一周中的第几天]题解,展示代码语言暂时为:C语言。(后续会更新Java与C++代码)

未见花闻的博客 4645

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【LeetCode】1185. Day of the Week 解题报告(C++)

作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录题目描述题目大意解题方法计算与1971-1-1之间天数日期 题目地址:https://leetcode.com/problems/day-of-the-week/ 题目描述 Given a date, return the corresponding day of...

负雪明烛 1394

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

leetcode 1185. Day of the Week 解法 python

一.问题描述 Given a date, return the corresponding day of the week for that date. The input is given as three integers representing theday,monthandyearrespectively. Return the answer as one of the ...

CSerwangjun的博客 1005

LeetCode-1185. Day of the Week

Given a date, return the corresponding day of the week for that date. The input is given as three integers representing theday,monthandyearrespectively. Return the answer as one of the followin...

reigns的博客 545

LeetCode 1185. 一周中的第几天

1. 题目 给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数:day、month 和 year,分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。 示例 1: 输入:day = 31, month = 8...

Michael是个半路程序员 1304

[leetcode]确定给定日期是星期几——蔡勒公式

如何计算某日期(日 月 年)是星期几。

weixin_53895623的博客 795

LeetCode //C - 1185. Day of the Week

Summary: The problem requires determining the day of the week for a given date (day, month, year) between 1971 and 2100. The solution involves calculating the total days elapsed from January 1, 1971 (a Friday) to the given date. This is done by summing the

Made in Code 206

语言字符串的连接算法_LeetCode基础算法题第1185.Day of the Week

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。如果有任何问题可以在文章后评论或者私信给我。如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。持续分享,敬请关注。L...

weixin_35102377的博客 99

[leetcode] 1185. Day of the Week

Description Given a date, return the corresponding day of the week for that date. The input is given as three integers representing the day, month and year respectively. Return the answer as one of the following values {“Sunday”, “Monday”, “Tuesday”, “Wedn

Learning from the mistakes 235

【Python】【难度:简单】Leetcode 1185. 一周中的第几天

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数:day、month 和year,分别表示日、月、年。 您返回的结果必须是这几个值中的一个{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。 示例 1: 输入:day = 31, month = 8...

thomashhs12的博客 269

leetcode每日一题1185. 一周中的第几天 枚举的简单题 还能更简单~你想到了么

本篇内容:leetcode每日一题1185. 一周中的第几天 最近更新:2022年1月2日 leetcode每日一题390.消除游戏 暴力的数学之美一边就懂 由浅入深 个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ) 点赞 收藏 ⭐留言 一键三连 关爱程序猿,从你我做起 本文目录写在前面题目示例

Alascanfu的博客 284

【Leetcode1185】今天星期几

一.题目(easy) 闰年or平年 能被4整除的年份是闰年,不能被4整除的年份是平年。 如:1988年2008年是闰年;2005年2006年2007年是平年。 但是如果是世纪年(也就是整百年),就只有能被400整除才是闰年,否则就是平年。如:2000年就是闰年,1900年就是平年。 闰年的2月有29天,平年的2月只有28天。 注意:1971年1月1日是星期五。 二.算法思想 第一种做法:利用 ‘ACM数论’ c++----基姆拉尔森计算公式计算(今天计算星期几)——不过菜鸡我记不住鸭 参考链接:https

发现问题,并解决问题,批判性思维 982

LeetCode 1185 Day of the Week 题解:用 Go 标准库 time 与多种星期算法计算星期几

本篇指南以 LeetCode 第 1185 题《Day of the Week》为核心,结合当前仓库 [LeetCode-Go](https://link.gitcode.com/i/fa01a7d126f9ccdcfe90f2c5f16ae5d1) 中该题的实际实现,讲解如何根据输入的日、月、年判断对应星期。读完本文,你将掌握基于 Go 标准库 `time` 的极简解法,理解 `time.Dat

gitblog_00154的博客 6
上一篇: LeetCode.1184-公交车站之间的距离(Distance Between Bus Stops)
下一篇: LeetCode.1189-balloon实例数最大值(Maximum Number of Balloons)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值