Given a string date representing a Gregorian calendar date formatted as YYYY-MM-DD, return the day number of the year.
Example 1:
Input: date = "2019-01-09"
Output: 9
Explanation: Given date is the 9th day of the year in 2019.
Example 2:
Input: date = "2019-02-10"
Output: 41
Constraints:
date.length == 10
date[4] == date[7] == '-', and all other date[i]'s are digits
date represents a calendar date between Jan 1st, 1900 and Dec 31th, 2019.
Solutions
Solution 1: Direct Calculation
According to the problem, the given date is in the Gregorian calendar, so we can directly calculate which day of the year it is.
First, calculate the year, month, and day from the given date, denoted as $y$, $m$, $d$.
Then, calculate the number of days in February of that year according to the leap year rules of the Gregorian calendar. There are $29$ days in February of a leap year and $28$ days in a non-leap year.
The leap year calculation rule is: the year can be divided by $400$, or the year can be divided by $4$ but not by $100$.
Finally, calculate which day of the year it is according to the given date, that is, add up the number of days in each previous month, and then add the number of days in the current month.
The time complexity is $O(1)$, and the space complexity is $O(1)$.