LeetCode 1154. 一年中的第几天

mac2022-06-30  31

LeetCode 1154. 一年中的第几天

给你一个按 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

示例4:

输入:date = "2004-03-01" 输出:61

思路:先判断在月份,将当前月份之前的月份天数和加起来,再加上当前月的日期也就是天数,再根绝闰年判断2月份的天数。

月份加和时,可以按照倒序将一年中的月份的天数排列在数组中,找到相应的月份,依次加和,2月份为28天,再根据闰年判断是否加1。

class Solution { public: int calcOfDay(int year,int month,int day){ int mon[12]={30,31,30,31,31,30,31,30,31,28,31,0};//日期按照倒序从11月份排列,12月份加上当月日期就好 int res=0; for(int i=12-month;i<12;i++) res+=mon[i]; if((month>2)&&((year%4==0&&year%100!=0)||year%400==0))//当月份超过两个月且为闰年时,日期加一 res++; res+=day; return res; } int dayOfYear(string date) { int year, month, day; string years = date.substr(0, 4); string months = date.substr(5, 2); string days = date.substr(8, 2); stringstream ss; ss << years; ss >> year; ss.clear(); ss << months; ss >> month; ss.clear(); ss << days; ss >> day; int res = calcOfDay(year, month, day); return res; } };

 string的substr用法sbustr(int index,int len);从index起始位置截取长度为len的字符串。

posted on 2019-09-15 10:24  木落长安rr 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/hhhhan1025/p/11521321.html

最新回复(0)