【Leetcode】1154. 一年中的第几天

文章目录

题目

1154. 一年中的第几天链接

思路

题目要求是给定一个字符串 date,它代表一个日期,采用标准的 YYYY-MM-DD 格式。需要计算这个日期是当年的第几天。

首先,我们可以通过字符串的索引来提取年、月和日的数值,并将其转换为整数,例如:

c++ 复制代码
int year = (date[0] - '0') * 1000 + (date[1] - '0') * 100 + (date[2] - '0') * 10 + (date[3] - '0');
int month = (date[5] - '0') * 10 + (date[6] - '0');
int day = (date[8] - '0') * 10 + (date[9] - '0');

接下来,可以利用月份的信息和闰年的判断,逐个累加每个月的天数,计算给定日期在当年的第几天。这个过程可以优化,无需逐个判断每个月的天数,可以通过数组预先存储每个月的天数信息:

c++ 复制代码
int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

这个数组的索引代表月份,数组的值代表该月的天数。然后利用闰年的条件,对二月的天数进行修改:

cpp 复制代码
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
    daysInMonth[2] = 29; // 闰年二月有29天
}

最后,利用循环累加到给定日期的前一个月,将当月的天数加上,即可得到该日期是当年的第几天:

cpp 复制代码
int totalDays = 0;
for (int i = 1; i < month; ++i) {
    totalDays += daysInMonth[i];
}
totalDays += day; // 加上当前月的天数

将得到的 totalDays 返回即可。

代码

c++ 复制代码
class Solution {
public:
    int dayOfYear(string date) {
        for(int i=0;i<date.size();++i)cout<<i<<' '<<date[i]<<endl;
        int nianfen=(date[0]-'0')*1000+(date[1]-'0')*100+(date[2]-'0')*10+(date[3]-'0');
        int yuefen=(date[5]-'0')*10+(date[6]-'0');
        int riqi=(date[8]-'0')*10+(date[9]-'0');
        //cout<<nianfen<<' '<<yuefen<<' '<<riqi;
        if(yuefen>1)riqi+=31;
        if(yuefen>2&&(nianfen%400==0||(nianfen%4==0&&nianfen%100!=0)))riqi+=29;
        else if(yuefen>2)riqi+=28;
        if(yuefen>3)riqi+=31;
        if(yuefen>4)riqi+=30;
        if(yuefen>5)riqi+=31;
        if(yuefen>6)riqi+=30;
        if(yuefen>7)riqi+=31;
        if(yuefen>8)riqi+=31;
        if(yuefen>9)riqi+=30;
        if(yuefen>10)riqi+=31;
        if(yuefen>11)riqi+=30;
        return riqi;
        
    }
};
相关推荐
胖咕噜的稞达鸭17 小时前
AVL树手撕,超详细图文详解
c语言·开发语言·数据结构·c++·算法·visual studio
CSCN新手听安17 小时前
【linux】多线程(六)生产者消费者模型,queue模拟阻塞队列的生产消费模型
linux·运维·服务器·c++
-SGlow-17 小时前
Linux相关概念和易错知识点(48)(epoll的底层原理、epoll的工作模式、反应堆模式)
linux·服务器·c语言·网络·c++
YSRM18 小时前
Leetcode+Java+图论II
java·leetcode·图论
熊猫钓鱼>_>18 小时前
Rust语言特性深度解析:所有权、生命周期与模式匹配之我见
算法·rust·软件开发·函数·模式匹配·异步编程·质量工具
csdn_aspnet18 小时前
C++ 圆台体积和表面积计算程序(Program for Volume and Surface area of Frustum of Cone)
c++
芒果量化18 小时前
Optuna - 自动调参利器&python实例
开发语言·python·算法·机器学习
麦麦大数据18 小时前
D025 摩托车推荐价格预测可视化系统|推荐算法|机器学习|预测算法|用户画像与数据分析
mysql·算法·机器学习·django·vue·推荐算法·价格预测
CoovallyAIHub18 小时前
IDEA研究院发布Rex-Omni:3B参数MLLM重塑目标检测,零样本性能超越DINO
深度学习·算法·计算机视觉
豐儀麟阁贵19 小时前
4.4数组的基本操作
java·开发语言·数据结构·算法