【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;
        
    }
};
相关推荐
lucky-billy1 分钟前
架构设计 - std::forward 条件转换配合万能引用(T&&)来实现完美转发
c++·完美转发·forward·万能引用
北京地铁1号线9 分钟前
Embedding 模型的经典benchmark:MTEB
算法
焦糖玛奇朵婷16 分钟前
盲盒小程序:开发视角下的功能与体验
java·大数据·jvm·算法·小程序
QiZhang | UESTC29 分钟前
【豆包生成,写项目看】探寻最优学习路径:线性回归从框架补全到从零手写
学习·算法·线性回归
bkspiderx38 分钟前
C/C++中float浮点型的存储方式与使用要点
c++
起个名字费劲死了1 小时前
QT + Socket 客户端/服务端 公网通讯
服务器·c++·qt·socket
知乎的哥廷根数学学派1 小时前
基于多物理约束融合与故障特征频率建模的滚动轴承智能退化趋势分析(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习
我是一只小青蛙8881 小时前
位图与布隆过滤器:高效数据结构解析
开发语言·c++·算法
踩坑记录2 小时前
leetcode hot100 238.除了自身以外数组的乘积 medium
leetcode
eso19832 小时前
白话讲述监督学习、非监督学习、强化学习
算法·ai·聚类