给你一个字符串data,按YYYY-MM-DD格式表示一个现行公元纪年法日期。返回该日期是当年的第几天。
示例 1:
输入:date = "2019-01-09"
输出:9
解释:给定日期是2019年的第九天。
示例 2:
输入:date = "2019-02-10"
输出:41
方法一:直接计算
思路与算法
我们首先从给定的字符串 date 中提取出年 year,月 month 以及日 day。这样一来,我们就可以首先统计到 month 的前一个月为止的天数。这一部分只需要使用一个长度为 12 的数组,预先记录每一个月的天数,再进行累加即可。随后我们将答案再加上day,就可以得到date 是一年中的第几天。需要注意的是,如果year 是闰年,那么二月份会多出一天。闰年的判定方法为:year 是 400 的倍数,或者 year 是 4 的倍数且不是 100 的倍数。
int dayOfYear(char * date){
int year=atoi(date);
int mother=atoi(date+5);
int day=atoi(date+8);
int sum=0;
int arr[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if ((year%4==0&&year%100!=0)||year%400==0)
{
arr[1]++;
}
for (int i=0;i
{
sum+=arr[i];
}
return sum+day;
}
时间复杂度:O(1)。我们将字符串长度(定值7)以及一年的月份数12视为常数。
空间复杂度:O(1)