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

news2024/11/15 9:32:46

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的图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rk3568 gamc0 控制器寄存器配置不了导致连接不上phy

系统启动 GMAC 的驱动开机 log 上出现打印&#xff1a;No PHY found 或者 Cannot attach to PHY。查阅rk 官方gmac 配置指导手册出现改问题的原因可能如下&#xff1a; 但反复检查硬件和软件发现都没问题。看内核启动日志发现gamc0 在启动过程中读取gmac0 的版本id是读取不到&a…

【golang】25、图片操作

用 “github.com/fogleman/gg” 可以画线, 框 用 “github.com/disintegration/imaging” 可以变换颜色 一、渲染 1.1 框和字 import "github.com/fogleman/gg"func DrawRectangles(inPath string, cRects []ColorTextRect, fnImgNameChange FnImgNameChange) (st…

Pinia使用

官方地址&#xff1a;Pinia | The intuitive store for Vue.js (vuejs.org)https://pinia.vuejs.org/ 1.安装 npm install pinia npm install pinia-plugin-persistedstate Pinia是一个基于Vue 3的状态管理库&#xff0c;它使得管理Vue的全局状态变得更加容易和直观。 而…

深度伪造,让网络钓鱼更加难以辨别

网络钓鱼一直是安全领域的一个突出话题&#xff0c;尽管这类诈骗形式已经存在了几十年&#xff0c;依旧是欺诈攻击或渗透组织的最有效方法之一。诈骗分子基于社会工程原理&#xff0c;通过邮件、网站以及电话、短信和社交媒体&#xff0c;利用人性&#xff08;如冲动、不满、好…

CodeWhisperer安装教导--一步到位!以及本人使用Whisperer的初体验。

CodeWhisperer是亚马逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。类似 Cursor 和Github AWS CodeWhisperer 亚马逊科技的CodeWhisperer是Amazon于2021年12月推出的一款代码补全工具&#xff0c;与GitHub Copilot类似。主要的功能有:代码补全注释…

力扣SQL50 进店却未进行过交易的顾客 查询

Problem: 1581. 进店却未进行过交易的顾客 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 山山山林老木 左连接查询筛选 transation_id 为 null 的值group by customer_id Code select v.customer_id ,count(customer_id) count_no_trans from Visits v left jo…

速卖通店铺营销秘籍:如何巧妙运用活动提升转化率

对于速卖通卖家而言&#xff0c;想要提升店铺的成交率&#xff0c;除了依赖付费推广外&#xff0c;更重要的是如何通过店铺营销来吸引和留住潜在买家。今天&#xff0c;我们就来深入探讨一下速卖通店铺营销的几个关键策略。 首先&#xff0c;我们要明确一点&#xff0c;速卖通平…

基于springboot+vue的可盈保险合同管理系统

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

力扣刷题:2.两数相加

题目&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这…

【AntDesign】解决嵌套section或layout中,h1字体比h2小问题

问题&#xff1a;以下情况均会导致h1比h2小&#xff0c;具体原因是浏览器默认样式里面&#xff0c;对h1不同层级设置了特殊的样式&#xff0c; <section class"css-dev-only-do-not-override-12q8zf4 ant-layout"><section class"css-dev-only-do-not…

动手搭建IPXE源码编译环境

最近本人工作中遇到有自动化装机需求&#xff0c;所以使用到了PXE。考虑到不同引导模式下引导文件会有差异&#xff0c;需要定制化开发&#xff0c;这才想到利用IPXE来个性化编译自己的引导文件。    之所以写这篇文章就是因为网上的好多教程都不是很对&#xff0c;很容易踩坑…

【C++】结构体内存对齐详解

规则 1.第一个成员在结构体变量偏移量为0 的地址处&#xff0c;也就是第一个成员必须从头开始。 2.其他成员的偏移量为对齐数**(该成员的大小 与 编译器默认的一个对齐数 中的较小值)**的整数倍。 3.结构体总大小对最大对齐数&#xff08;通过最大成员来确定&#xff09;的整数…

【教程】搭建咸鱼之王私服,附源码下载

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 教程来自&#xff1a;咸鱼之王源码下载&#xff0c;附安装教程 - 技术控 - YiOVE论坛 一键部署 下载链接&#xff1a; https://pan.baidu.com/s/1t1Aj5zfAjbPVyuKq1jbd2w?pwd518i https://pan.baidu.com/s/173…

Linux下gcc编译常用命令详解

在Linux环境下&#xff0c;使用gcc编译器进行源代码的编译是程序员日常工作的一部分。本篇将介绍一些常用的gcc编译命令&#xff0c;帮助开发者更好地理解和使用这些命令。 1. 基本编译命令 gcc工作流程&#xff1a; 编译单个源文件 gcc source.c -o output这个命令将sour…

flutter弹窗动画,Android项目开发如何设计整体架构

接下来我们针对字节跳动Android中高级面试展开的完整面试题 Handler 相关知识&#xff0c;面试必问&#xff01; 常问的点&#xff1a; Handler Looper Message 关系是什么&#xff1f; Messagequeue 的数据结构是什么&#xff1f;为什么要用这个数据结构&#xff1f; 如何在…

MIT6.828操作系统工程实验学习笔记(一)

写在前面 本系列文章将会尝试以学习笔记的形式展开&#xff0c;即每篇文章都没有一个明确的主线&#xff0c;主要是堆砌实验过程中遇到的知识点和解决的问题 本系列涉及的学习对象是MIT面向研究生开设的操作系统工程课程的Lab部分&#xff0c;该课程的编号为MIT6.828 &#xf…

浅谈 Linux 孤儿进程和僵尸进程

文章目录 前言孤儿进程僵尸进程 前言 本文介绍 Linux 中的 孤儿进程 和 僵尸进程。 孤儿进程 在 Linux 中&#xff0c;就是父进程已经结束了&#xff0c;但是子进程还在运行&#xff0c;这个子进程就被称作 孤儿进程。 需要注意两点&#xff1a; 孤儿进程最终会进入孤儿院…

frp 内网穿透 linux部署版

frp 内网穿透 linux部署版 前提安装 frp阿里云服务器配置测试服务器配置访问公网 前提 使用 frp&#xff0c;您可以安全、便捷地将内网服务暴露到公网&#xff0c;通过访问公网 IP 直接可以访问到内网的测试环境。准备如下&#xff1a; 公网 IP已部署好的测试服务 IP:端口号阿…

Linux系统部署前后端分离项目

一、Nginx简介 1.1 什么是nginx? Nginx&#xff08;发音同"engine x"&#xff09;是一个高性能的反向代理和 Web 服务器软件&#xff0c;最初是由俄罗斯人 Igor Sysoev 开发的。Nginx 的第一个版本发布于 2004 年&#xff0c;其源代码基于双条款 BSD 许可证发布&am…

人脸高清算法GFPGAN之TensorRT推理

1. 综述 最近由于做数字人项目&#xff0c;采用的是wav2lip GFPGAN进行人脸面部高清&#xff0c;但GFPGAN模型本身比较大&#xff0c;所以想着使用TensorRT来代替原始的pth推理看看能否提升运行速度&#xff0c;于是便开始了这趟windows1之下进行GFPGAN的trt推理的折腾之旅。…