【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;
        
    }
};
相关推荐
茶猫_4 分钟前
力扣面试题 - 40 迷路的机器人 C语言解法
c语言·数据结构·算法·leetcode·机器人·深度优先
轻浮j14 分钟前
Sentinel底层原理以及使用算法
java·算法·sentinel
Abelard_29 分钟前
LeetCode--347.前k个高频元素(使用优先队列解决)
java·算法·leetcode
小猪写代码32 分钟前
C语言:递归函数(新增)
算法·c#
点云SLAM34 分钟前
C++创建文件夹和文件夹下相关操作
开发语言·c++·算法
CodeClimb1 小时前
【华为OD-E卷 - 猜字谜100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
_小柏_1 小时前
C/C++基础知识复习(46)
c语言·开发语言·c++
heeheeai1 小时前
kotlin 函数作为参数
java·算法·kotlin
是十一月末1 小时前
opencv实现KNN算法识别图片数字
人工智能·python·opencv·算法·k-近邻算法
袖清暮雨1 小时前
5_SparkGraphX讲解
大数据·算法·spark