【LeetCode】一周中的第几天+ 一年中的第几天

2023-12-30

文章目录

    • 一周中的第几天
          • 方法一:模拟
            • 思路
            • 步骤
          • 方法二:调用库函数
          • 方法三:调用库函数
    • [1154. 一年中的第几天](https://leetcode.cn/problems/day-of-the-year/)
          • 方法一:直接计算
            • 思路:
          • 方法二:调用库函数
            • 思路

一周中的第几天

在这里插入图片描述

  • 提示:给出的日期一定是在 19712100 年之间的有效日期。
方法一:模拟
思路
  • 1.可以根据1970年的最后一天(周四),计算出和输入日期间隔了几天(ans+之前的年份天数和+当前的月份天数和+输日的天数)

  • 2.求出具体的天数之后进行取模,得到具体的星期

步骤

1.定义一个字符串类型的数组,大小为7,记录星期字典

定义一个int类型的数组,大小为12,记录12个月份分别对应的天数(闰年进行判断)

2.定义一个初始天数ans=4(从周四开始)

3.从1971年开始遍历,直到输入的年份,判断当前年是否为闰年,初始值加上对应的天数

4.遍历月份直到输入月份,二月的情况根据是否是闰年来加上额外的一天

5.最后加上输入的天数,所求之和取模

    static String[] week =new String[] {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    //每周对应的星期
    static int[] nums = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    //每个月对应的天数
    public String dayOfTheWeek(int day, int month, int year) {
        int ans = 4;//初始值为4,从周四开始
        for (int i = 1971; i < year; i++) {
            boolean isLeapYear = (i % 4 == 0 && i % 100 != 0) || i % 400 == 0;
            //判断是否为闰年
            ans += isLeapYear ? 366 : 365;
            //是闰年加366,不是加355
        }
        for (int i = 1; i < month; i++) {
            ans += nums[i - 1];
            //之前的月份数之和
            if (i == 2 && ((year % 4 == 0 && year% 100 != 0) || year % 400 == 0)){
                ans++;//如果当前是闰年,单独加1
            }
        }
        ans += day;//加上输入的天数
        return week[ans % 7];
        //求模返回对应星期
    }
方法二:调用库函数

1.使用LocalDate.of(year, month, day)创建了一个LocalDate对象date,表示给定的日期。LocalDate是Java 8中新增的日期类,用于处理日期相关操作。(Java8新增)

2.通过调用date.getDayOfWeek()方法获取该日期的星期几信息,getDayOfWeek()返回的是一个DayOfWeek枚举类型,表示星期几。

3.最后,通过调用getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH)方法,将星期几信息以全名的形式返回,使用英语的地区设置。

import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.*;

class Solution {

    public String dayOfTheWeek2(int day, int month, int year) {
        LocalDate date = LocalDate.of(year, month, day);
        //创建了一个`LocalDate`对象`date`,表示给定的日期
        return date.getDayOfWeek().getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH);
        //方法获取该日期的星期几信息
        //将星期几信息以全名的形式返回,使用英语的地区设置
    }
方法三:调用库函数

1.首先声明了一个私有的静态变量calendar,并调用其静态方法getInstance()获取一个默认时区的Calendar实例。然后声明了一个私有的静态变量weekFormat,它是一个SimpleDateFormat对象,用于格式化星期几信息。

2.使用set(year, month - 1, day)方法将calendar设置为给定日期。由于Calendar中的月份从0开始,所以需要将传入的month减去1

3.使用weekFormat.format(calendar.getTime())方法将calendar中的时间格式化为星期几的字符串,其中weekFormat是一个SimpleDateFormat对象,通过设置格式为"EEEE"来表示星期几的全名形式

    private static final Calendar calendar = Calendar.getInstance();
//获取一个默认时区的`Calendar`实例
    private static final SimpleDateFormat weekFormat = new SimpleDateFormat("EEEE");
//格式化星期几信息

    public String dayOfTheWeek3(int day, int month, int year) {
        calendar.set(year, month - 1, day);
       // 将`calendar`设置为给定日期
        return weekFormat.format(calendar.getTime());
        //`calendar`中的时间格式化为星期几的字符串
    }

1154. 一年中的第几天

在这里插入图片描述

方法一:直接计算
思路:

1.根据所给的字符串,分别截取出年月日的信息,转化成整数

2.根据当前年份,判断是否为闰年,是闰年:二月加1

3.之前月份天数之和,最后加上天数的信息

 
public int dayOfYear(String date) {
        int year = Integer.parseInt(date.substring(0, 4));
        int month = Integer.parseInt(date.substring(5, 7));
        int day = Integer.parseInt(date.substring(8));
        //调用substring分别截取出年月日的信息,转化为整数

        int[] monthes = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        //每个月份的天数
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            ++monthes[1];
        }//如果当前的闰年,二月加1天(直接改变月份字典中的数)

        int ans = 0;
        for (int i = 0; i < month - 1; ++i) {
            ans += monthes[i];//每个月天数之和
        }
        return ans + day;
    }
方法二:调用库函数
思路

1.指定日期字符串的格式

2.解析为 LocalDate 对象

3.返回该日期在其所属年份中的天数

    private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//定义了一个 DateTimeFormatter 对象,它指定了日期字符串的格式为 "yyyy-MM-dd"

    public int dayOfYear2(String date) {
        return LocalDate.parse(date, formatter).getDayOfYear();
        //LocalDate.parse() 方法将日期字符串解析为 LocalDate 对象
        //getDayOfYear() 方法则返回该日期在其所属年份中的天数
    }

点击移步博客主页,欢迎光临~

偷cyk的图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/420742.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot整合MySQL和Druid

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合MySQL和Druid 📚个人知识库: Leo知识库,欢迎大家访问 目录 …

【VTKExamples::PolyData】第四十一期 PointLocator

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例PointLocator,并解析接口vtkPointLocator,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. PointLocator …

13款可以轻松上手画图软件推荐

在当今的数字世界里&#xff0c;我们有各种各样的创作工具&#xff0c;尤其是画图软件。所以问题来了&#xff1a;我们应该如何选择许多免费的绘画软件&#xff1f;为了回答这个问题&#xff0c;我们将在本文中分享10个领先的画图软件。每一个都有其独特的特点和优势&#xff0…

Oracle 11g升级19c 后部分查询功能很慢

*Oracle 11g升级19c 后部分查询功能很慢 今天生产突然有个查询非常慢&#xff0c;日志显示执行了50秒左右&#xff0c;但是从日志中拿出SQL在PLSQL执行&#xff0c;发现用时不到1秒&#xff0c;查看SQL,怀疑是下面几种原因导致 1、使用函数不当 UNIT.UNIT_CODE LIKE CONCAT(‘…

【Pytorch】成功解决AttributeError: ‘tuple’ object has no attribute ‘dim’

【Pytorch】成功解决AttributeError: ‘tuple’ object has no attribute ‘dim’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&…

部署若依前后端分离项目,连接数据库失败

部署若依前后端分离项目&#xff0c;连接数据库失败&#xff0c;异常如下&#xff1a; 解决方案&#xff1a;application配置文件里&#xff0c;连接数据库的参数useSSL的值改为false

微服务day02-Ribbon负载均衡与Nacos安装与入门

一.Ribbon负载均衡 在上一节中&#xff0c;我们通过在RestTemplte实例中加上了注解 LoadBalanced,表示将来由RestTemplate发起的请求会被Ribbon拦截和处理&#xff0c;实现了访问服务时的负载均衡&#xff0c;那么他是如何实现的呢&#xff1f; 1.1 Ribbon负载均衡的原理 Rib…

windows server mysql 数据库停止 备份 恢复全流程操作方法

一,mysql备份 mysql最好是原工程文件备份.不需要sql查询的方式备份.安全高效. 比如,安装php与mysql组合后,我的mysql文件保存在: D:\phpstudy_pro\Extensions\MySQL5.7.26\data\dux 我只需要复制一份,保存起来就行. 二,mysql恢复 怎么恢复呢.我们一般是只恢复其中一个表,则找…

Watir 试用手记——一个很不错的开源 Web 自动化测试框架

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

融资项目——JWT令牌

1.JSON Web Token (JWT)是一种自包含令牌。自包含令牌本身已经包含了用户的相关信息&#xff0c;然后将这些信息通过例如加密的形式形成的令牌&#xff0c;由服务器进行解密从而完成对用户信息的确认。JWT一共由头、载荷与认证签名三个部分组成。然后由这三段字符拼接形成&…

Python Web开发记录 Day5:jQuery(JavaScript库)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 五、jQuery1、jQuery-选择器和菜单案例①快速上…

CentOS7安装MySQL5.7

查看并卸载系统自带的 Mariadb rpm -qa|grep mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 检查系统是否安装过MySQL rpm -qa | grep mysql 检查有无MySQL用户组 cat /etc/group | grep mysql cat /etc/passwd | grep mysql 创建MySQL用户组和用户 groupadd m…

年轻人怎么搞钱?

年轻人想要搞钱&#xff0c;可以考虑以下几个方面&#xff1a; 1. 创业&#xff1a;年轻人可以通过自己的创意&#xff0c;找到一个市场的空缺&#xff0c;开创自己的业务。可以从比较小的项目开始&#xff0c;逐渐扩大范围&#xff0c;积累经验和财富。 2. 投资&#xff1a;…

泰山派学习笔记(二)一步一步编译SDK文件

上一节&#xff0c;我们安装了基于虚拟机的ubuntu系统&#xff0c;并且建立了samba服务打通了win10和ubuntu系统中的文件传输。本节课我们继续对立创官方提供的SDK文件进行编译&#xff0c;学习编译的方法。引用官方的话&#xff1a;如果只想下载别人编译好的固件并且做一些应用…

基于springboot+vue的智慧图书管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Java缓存简介

内存访问速度和硬盘访问速度是计算机系统中两个非常重要的性能指标。 内存访问速度&#xff1a;内存是计算机中最快的存储介质&#xff0c;它的访问速度可以达到几纳秒级别。内存中的数据可以直接被CPU访问&#xff0c;因此读写速度非常快。 硬盘访问速度&…

APP攻防-实战拿下某seseAPPSpringboot未授权HeapDump提取OSS利用

知识点 1、APK-抓包 2、资产信息收集 3、SpringBoot-漏洞利用 4、自动化工具 5、HeapDump-分析提取 6、AccessKEY-利用后续 演示案例&#xff1a; 1、APK-抓包 2、资产信息收集 3、SpringBoot-漏洞利用 SpringBoot漏洞利用&#xff1a; https://github.com/LandGrey/Spring…

“内容+科技” 2023爱奇艺拿稳了“高质量增长”指南

“无论影视行业还是互联网行业&#xff0c;最难的时候应该是过去了&#xff0c;接下来我们要高质量增长。” 2023年5月10日&#xff0c;爱奇艺创始人、CEO龚宇在爱奇艺世界大会上给出了这样的判断。大半年之后&#xff0c;爱奇艺公布的2023年全年财报&#xff0c;最终诠释了高…

HMAC算法

HMAC HMAC可以用来加密、数字签名、报文验证等。 1. 消息认证码 消息认证码(Message Authentication Code,MAC)是基于消息和秘钥的公开函数,输出为定长数据: MAC=C(M,K) 假定通信双发共享秘钥K,发送方A向接收方B发送报文M并附上MAC,记为: A→B:M||MAC 当B收到后,使…

JavaScript继承 寄生组合式继承 extends

JavaScript继承 1、JS 的继承到底有多少种实现方式呢? 2、ES6 的 extends 关键字是用哪种继承方式实现的呢? 继承种类 原型链继承 function Parent1() {this.name parentlthis.play [1, 2, 3] }function Child1() {this.type child2 }Child1.prototype new Parent1(…