LeetCode.1154-一年中的第几天(Day of the Year)

LeetCode 1154:一年中的第几天(Day of the Year)解法汇总 文章目录Solution 更多LeetCode题解 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 Explan... 阅读详情

这是小川的第410次更新,第442篇原创

看题和准备

今天介绍的是LeetCode算法题中Easy级别的第261题(顺位题号是1154)。给定表示格式为YYYY-MM-DD的公历日期的字符串日期,返回该日期在年份中的编号。例如:

输入:date =“2019-01-09”
输出:9
说明:给定日期是2019年的第9天。

输入:date =“2019-02-10”
输出:41

输入:date =“2003-03-01”
输出:60

输入:date =“2004-03-01”
输出:61

注意:

  • date.length = 10

  • date[4] == date[7] == ‘-’,所有其他date[i]都是数字

  • 日期表示1900年1月1日至2019年12月31日之间的日历日期。

第一种解法

题目的意思是计算给的日期在年份中的天数,年份分平年、闰年,月份分大月、小月,直接对日期字符串进行截取,转为对应的年月日数字。针对年份的处理,如果是闰年,则2月有29天,针对月份的处理,判断月份,然后累加对应的天数即可。

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, 10));
    switch (month) {
        case 12:
            day += 30;
        case 11:
            day += 31;
        case 10:
            day += 30;
        case 9:
            day += 31;
        case 8:
            day += 31;
        case 7:
            day += 30;
        case 6:
            day += 31;
        case 5:
            day += 30;
        case 4:
            day += 31;
        case 3:
            day += 28;
            if (isLeapYear(year)) {
                day++;
            }
        case 2:
            day += 31;
    }
    return day;
}

/**
 * 判断当前年份是否为闰年
 * @param year
 * @return
 */
public boolean isLeapYear(int year) {
    // 普通闰年,能被4整除,但是后两位不以00结尾
    if (year%4 == 0 && year%100 != 0) {
        return true;
    }
    // 世纪闰年,后两位以00结尾,且能被400整除
    if (year%100 == 0 && year%400 == 0) {
        return true;
    }
    return false;
}

第二种解法

针对第一种解法中的switch语句,我们可以用数组进行替代,可以减少代码量。以月份为索引,天数为value,使用循环来处理天数,至于闰年的判断则不变。

public int dayOfYear2(String date) {
    int[] arr = {31,28,31,30,31,30,31,31,30,31,30,31};
    int year = Integer.parseInt(date.substring(0, 4));
    int month = Integer.parseInt(date.substring(5, 7));
    int day = Integer.parseInt(date.substring(8, 10));
    for (int i=0; i<month-1; i++) {
        day += arr[i];
    }
    return isLeapYear(year) && month >= 3 ? day+1 : day;
}

/**
 * 判断当前年份是否为闰年
 * @param year
 * @return
 */
public boolean isLeapYear(int year) {
    // 普通闰年,能被4整除,但是后两位不以00结尾
    if (year%4 == 0 && year%100 != 0) {
        return true;
    }
    // 世纪闰年,后两位以00结尾,且能被400整除
    if (year%100 == 0 && year%400 == 0) {
        return true;
    }
    return false;
}

第三种解法

既然我们已经知道了每一个月有多少天,那么我们可以直接将依次累计的天数放入数组中,月份减1为数组索引。

创建一个长度为13的数组,第一项为0,因为一月可以直接获取天数显示即可,第二项为31天,因为二月的天数需要加上一月的31天,依次往后计算,此数组中的月份累计天数以平年为基础。如果当前年份是闰年,并且月份大于2月,则需要在计算结果上多加一天。

public int dayOfYear3(String date) {
    int[] arr = {0,31,59,90,120,151,181,212,243,273,304,334,365};
    int year = Integer.parseInt(date.substring(0, 4));
    int month = Integer.parseInt(date.substring(5, 7));
    int day = Integer.parseInt(date.substring(8, 10));
    if (isLeapYear(year) && month >= 3) {
        return arr[month-1]+day+1;
    }
    return arr[month-1]+day;
}

/**
 * 判断当前年份是否为闰年
 * @param year
 * @return
 */
public boolean isLeapYear(int year) {
    // 普通闰年,能被4整除,但是后两位不以00结尾
    if (year%4 == 0 && year%100 != 0) {
        return true;
    }
    // 世纪闰年,后两位以00结尾,且能被400整除
    if (year%100 == 0 && year%400 == 0) {
        return true;
    }
    return false;
}

小结

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

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

LeetCode --- 1154. Day of the Year 解题报告 Given a stringdaterepresenting aGregorian calendardate formatted asYYYY-MM-DD, returnthe day number of the year. Example 1: Input: date = "2019-01-09" Output: 9 Explanation: Given date is the 9th day of the year in 2019. Example 2: Input: da... 阅读详情

相关推荐

双轮差动机器人SLAM实战:轮速里程计从建模到精度验证(附Matlab代码)

本文详细介绍了双轮差动机器人SLAM系统中轮速里程计的实现全流程,包括核心原理、建模方法、Matlab代码实现及精度验证。通过轮速仪数据建模和连续积分算法,提升定位精度,并附有完整的误差分析和工程优化技巧,为开发者提供实用参考。

weixin_29050271的博客 224

LeetCode刷题-一年中的第几天

前言说明 算法学习,日常刷题记录。 题目连接 一年中的第几天 题目内容 给你一个按YYYY-MM-DD格式表示日期的字符串date,请你计算并返回该日期是当年的第几天。 通常情况下,我们认为1月1日是每年的第1天,1月2日是每年的第2天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。 示例1: 输入:date = “2019-01-09” 输出:9 示例2: 输入:date = “2019-02-10” 输出:41 示例3: 输入:date = “2003-03-01” 输出:60

纯洁的博客 685

Mac上快速部署DeepSeek模型:Ollama终端操作全指南

本文详细介绍了在Mac上使用Ollama终端快速部署DeepSeek模型的完整指南。从硬件要求、Ollama安装、模型下载运行,到高级配置、可视化界面及常见问题解决,提供了全流程操作步骤与优化技巧,帮助开发者高效搭建本地AI助手,实现稳定、私密的离线使用体验。

weixin_29251567的博客 555

Leetcode 1154:一年中的第几天(超详细的解法!!!)

给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,请你计算并返回该日期是当年的第几天。 通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。 示例 1: 输入:date = "2019-01-09" 输出:9 示例 2: 输入:date = "2019-02-10" 输出:41 示例...

coordinate的博客 1407

Windows安装WSL子系统及docker,以及WSL和docker配置、使用及问题解决

在Windows操作系统中,Ubuntu子系统(也称为Windows Subsystem for Linux, WSL)为开发者提供了一个在Windows环境下运行Linux环境的平台。然而,有时用户在按照Ubuntu子系统或者使用WSL时,可能会遇到各种问题,下面总结一下解决方式。想要在Windows上安装Docker(实际上是基于Hyper-V或者WSL2这两项虚拟化技术),需要开启虚拟化功能,所以不管是对于系统还是硬件都有一定的要求。

sym的博客 9789

【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere

银河麒麟作为国家核高基专项的重要成果,国防版凭借其卓越的安全性和可靠性,已成为军工领域的首选操作系统。之前我们在适配麒麟V4国防版的过程中已发现诸多安全性要求,而麒麟V10国防版在安全防护等级上又达到了更高的级别。本文将主要演示离线部署,因为军工项目基本不会出现联网场景。即使在线,也可以按离线方式部署,且离线部署由于有私有仓库,不会存在镜像获取不到和丢失情况。

jiaworld的博客 730

用于时间序列的数据_20种简单而强大的功能,用于使用日期和时间的时间序列...

用于时间序列的数据Time series is nothing but a series of data points that are observed with respect to time. In data science, time series is mostly an independent variable and the goal is to predict the future...

weixin_26741341的博客 2631

游戏开发实战:用UE4 Marschner模型打造次世代头发渲染(附Shader代码解析)

本文详细解析了如何在UE4中使用Marschner模型实现次世代头发渲染,包括Shader代码逐行解读与参数调优。通过对比传统Kajiya-Kay模型,展示了Marschner模型在物理精确性和视觉效果上的优势,并提供了性能优化与实战技巧,帮助技术美术师提升游戏角色渲染品质。

weixin_28223453的博客 241

1154. Day of the Year

下午有点感冒,挑了个简单的题刷来打发时间,然后被大神教做人 题目: Given a stringdaterepresenting aGregoriancalendardate formatted asYYYY-MM-DD, return the day number of the year. Example 1: Input: date = "2019-01-09" O...

同销万古愁的博客 367

《Claude Code 实战》第 1 章:开启智能编程新纪元——初识 Claude Code

简单来说,Claude Code 是 Anthropic 公司推出的一款基于 Claude 3.7 Sonnet 等大语言模型的强大编程工具。但与传统的 ChatGPT 或普通的聊天机器人不同,Claude Code 具备了"动手"的能力。它不仅会"说",更会"做"。想象一下,你不再需要描述复杂的命令行参数,也不需要为了修改一个配置文件而频繁切换编辑器。Claude Code 可以直接读取你项目中的文件、理解复杂的代码库结构、执行终端命令,并直接为你生成或修改代码。

AI天才研究院 245

MicroCap声学仿真介绍(一)

5-频率上下限选择,需要注意的是,第一个数字是上限,第二个数字是下限,如果填反了,会有报错提示;下三角可以选择“Auto”、“linear”、“log”和“list”,设置的是频率点之间的距离和频率点的数量。Component是用来选择部件的模块,如上图所示,声学仿真常用到的是“Electroacoustic Macros AC”、“Electroacoustic Macros TR”、“NXP Transducers”以及“NXP HD components”。3是声学部件,是声学仿真中常用的部件。

山无忧的博客 5109

leetcode 1154. 一年中的第几天(C++、python)

给你一个按YYYY-MM-DD格式表示日期的字符串date,请你计算并返回该日期是当年的第几天。 通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。 示例 1: 输入:date = "2019-01-09" 输出:9 示例 2: 输入:date = "2019-02-10"...

qq_27060423的博客 594

超临界二氧化碳再热再压缩布雷顿循环建模与先进控制

超临界二氧化碳布雷顿循环建模与先进控制研究 本文研究了超临界二氧化碳再热再压缩布雷顿循环系统的建模与控制。通过MATLAB/Simscape构建了包含压缩机、透平、回热器等关键组件的动态模型,并设计了基于模型预测控制(MPC)和自抗扰控制(ADRC)的多层控制策略。系统采用转速控制的压缩机、阀门开度控制的透平,以及可变热源加热器,实现了全动态分析。研究结果表明,MPC与ADRC混合控制方案相较于传统PID控制,功率超调降低至0.9%,效率波动控制在±0.08%,扰动恢复时间缩短至12秒。

AI的内部世界的博客 343

Leetcode 1154.一年中的第几天(Day of the Year)

Leetcode 1154.一年中的第几天 1 题目描述(Leetcode题目链接)   给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,请你计算并返回该日期是当年的第几天。 通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。 输入:date = "2019-01-09" 输出:9 输入:date = "2019-02-10" 输出:41 输入:date = "2003-03-01" 输出

qq_39378221的博客 403

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LeetCode - 1154 - 一年中的第几天(day-of-the-year)

一 目录 不折腾的前端,和咸鱼有什么区别目录一 目录二 前言三 解题及测试四 LeetCode Submit五 解题思路二 前言 难度:简单涉及知识:数...

weixin_41806099的博客 216

假人有限元模型

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

leetcode 1154. Day of the Year 一年中的第几天

Problem:将月份和天数匹配起来,然后累加,最后判断是否闰年且月份>2,特殊情况是1900年不算闰年。

邹九的个人博客 58

[leetcode] 1154. Day of the Year

Description 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 Explanation: Given date is the 9th day of the year in 2019. Example 2: Input

Learning from the mistakes 237

LeetCode 1154. Day of the Year

import datetime class Solution: def dayOfYear(self, date: str) -> int: time=date.split("-") year=int(time[0]) mon=int(time[1]) day=int(time[2]) d1 = dat...

zkyxgs518的博客 352

​力扣解法汇总1154-一年中的第几天

原题链接:力扣 描述: 给你一个字符串date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。请你计算并返回该日期是当年的第几天。 通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。 示例 1: 输入:date = "2019-01-09" 输出:9 示例 2: 输入:date = "2019-02-10" 输出:41 示例 3: 输入:date = "2003-03-0.

分享+记录 634

【LeetCode】1154. Day of the Year 解题报告(C++)

作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录题目描述题目大意解题方法计算1月1号之间天数日期 题目地址:https://leetcode.com/problems/day-of-the-year/ 题目描述 Given a string date representing a Gregorian calen...

负雪明烛 806

【力扣时间】【1154】【简单】一年中的第几天

今天的题没有什么营养。 不过冬至了,不要忘记吃饺子哦。

山峰 405

Leetcode 1154. Day of the Year

文章作者:Tyan 博客:noahsnail.com  |  优快云  |  简书 1. Description 2. Solution **解析:**Version 1,先将年、月、日分离出来,然后根据月份和日期累加天数,最后判断时闰年的话总天数加1。 Version 1 class Solution: def dayOfYear(self, date: str) -> int: year, month, day = map(i

SnailTyan 343

【Leetcode】1154. Day of the Year

题目地址: https://leetcode.com/problems/day-of-the-year/ 给定一个日期,形式为YYYY-MM-DD,判断这一天是这一年的第几天。 代码如下: public class Solution { public int dayOfYear(String date) { String[] ss = date.split("-"); int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30,

数学、算法爱好者的博客 372

LeetCode //C - 1154. Day of the Year

Summary: The problem requires calculating the day number of the year for a given Gregorian calendar date formatted as "YYYY-MM-DD". The solution involves parsing the year, month, and day from the string, summing the days of all previous months, and adding

Made in Code 258

LeetCode 1154. Day of the Year【模拟/前缀和】简单

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。 为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库。在这一仓库中,你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类.

memcpy0的博客 468

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

给你一个按 YYYY-MM-DD 格式表示日期的字符串date,请你计算并返回该日期是当年的第几天。 通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。 示例 1: 输入:date = "2019-01-09" 输出:9 示例 2: 输入:date = "2019-02-10" 输出:...

thomashhs12的博客 501
上一篇: LeetCode.1137-第N个泰波那契数(N-th Tribonacci Number)
下一篇: LeetCode.1160-找到可以由给定字符组成的字符串(Find Words That Can Be Formed by Characters)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值