网站首页 > java教程 正文
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。如果有任何问题可以在文章后评论或者私信给我。如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。持续分享,敬请关注。
LeetCode 1185. 给定一个日期求星期几(Day of the Week)
问题描述:
给定一个日期,求该日期是星期几。
输入是三个整数,分别表示日、月和年。返回英文的星期字符串:
"Sunday"、"Monday"、"Tuesday"、"Wednesday"、"Thursday"、"Friday"、"Saturday"
注:
给定日期为1971年至2100年之间的有效日期;
示例:
C语言实现:
这道题太简单,我不知道它要考什么。
对于java和python来说,用自带的库仅用一句代码就可实现。
对于C语言来说可能稍微复杂,我的实现是先将年月日连接起来组成一个日期字符串,随便哪种格式都可以。然后交给strptime()生成一个struct tm对象time,struct tm结构如下:
然后调用strftime(),将time格式化成我们想要的星期字符串即可。
代码如下:
注意这其中涉及到日期格式描述字段:
%Y :年;
%m :月;
%d :日;
%F :等价于 %Y-%m-%d;
%A :星期的全称;
面试的话,估计不会考这个,太简单了,如果面试人员希望你不用库函数实现的话,那么就比较复杂了。
一般思路是这样的:
我们显然是知道当前日期是星期几的,然后计算给定日期到当前日期的天数差diff;
设:i = diff % 7;arr = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
那么 arr[i] 就是该日期的星期信息。
这个算法复杂的地方是计算diff,因为牵涉到是否闰月的情况。
此外,我查询了一些资料,发现计算日期的算法还挺多,有些算法还是比较复杂的,我们这里只分享一个比较快速简洁的算法。
该算法是一个叫坂本智彦的日本人在1992年发表的,这个算法对于任何1752年之后的日期都是准确的。
代码如下:
其中arr是一个长度为13的数组,除了第一个元素,其他元素的值为:
arr这个数组是另一个由数学家高斯提出的星期的算法中的一个月份偏移查询表。这里就不描述了,因为它是一个常数表。感兴趣的可以去搜索一下。
坂本智彦的这个算法,我没有找到更详细的说明文章,我还不知道为什么最后是这样一个表达式。了解的朋友可以在评论去分享。
Java语言实现:
Java 的实现和C语言的实现一致,不再撰述。代码如下:
Python语言实现:
Python 的实现和C语言的实现一致,不再撰述。代码如下:
- 上一篇: 现代与传统日期时间处理工具概览(时间 日期)
- 下一篇: 网上找的一段代码突然爆了,项目出现大Bug
猜你喜欢
- 2024-11-11 Java 8新特性:新的时间和日期API(java的日期类型)
- 2024-11-11 整理一波Mysql中易忘基础知识点和也许你也会踩的一些坑
- 2024-11-11 Idea安装通义灵码教程(idea安装使用教程)
- 2024-11-11 「开发者成长」不要在网上乱拷贝代码了
- 2024-11-11 java 8 新的时间和日期 API(java对日期的处理)
- 2024-11-11 如何正常掌握MySql时间处理函数的学习与实践,看了这篇就够了
- 2024-11-11 一段网上找的代码突然爆了,项目出现大Bug
- 2024-11-11 python之time模块详细梳理(python中time模块详解)
- 2024-11-11 网上找的一段代码突然爆了,项目出现大Bug
- 2024-11-11 现代与传统日期时间处理工具概览(时间 日期)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)