一年中的第几天
https://leetcode-cn.com/problems/day-of-the-year/
//判断平年还是闰年
int isLearYear(int year) {
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 1 : 0;
}
int dayOfYear(char * date){
//存放当前月之前的天数和
int before_month_days[2][12] = {
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334},
{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}
};
//截取年月日字符串
char date_str[3][5] = {0};
strncpy(date_str[0], date, 4);
strncpy(date_str[1], &date[5], 2); //date+5 <=> &date[5]
strncpy(date_str[2], &date[8], 2); //date+8 <=> &date[8]
//字符串转化为整形
int year = atoi(date_str[0]), month = atoi(date_str[1]), day = atoi(date_str[2]);
return before_month_days[isLearYear(year)][month-1] + day;
}
复杂度
- 算法使用空间是恒定的常数项,故而空间复杂度为O(1)。
- 算法过程为获取hash值再求和,故而时间复杂度也为O(1)。