comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
Easy |
1199 |
Weekly Contest 149 Q1 |
|
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 otherdate[i]
's are digitsdate
represents a calendar date between Jan 1st, 1900 and Dec 31st, 2019.
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
Then, calculate the number of days in February of that year according to the leap year rules of the Gregorian calendar. There are
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
class Solution:
def dayOfYear(self, date: str) -> int:
y, m, d = (int(s) for s in date.split('-'))
v = 29 if y % 400 == 0 or (y % 4 == 0 and y % 100) else 28
days = [31, v, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
return sum(days[: m - 1]) + d
class Solution {
public int dayOfYear(String date) {
int y = Integer.parseInt(date.substring(0, 4));
int m = Integer.parseInt(date.substring(5, 7));
int d = Integer.parseInt(date.substring(8));
int v = y % 400 == 0 || (y % 4 == 0 && y % 100 != 0) ? 29 : 28;
int[] days = {31, v, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int ans = d;
for (int i = 0; i < m - 1; ++i) {
ans += days[i];
}
return ans;
}
}
class Solution {
public:
int dayOfYear(string date) {
int y, m, d;
sscanf(date.c_str(), "%d-%d-%d", &y, &m, &d);
int v = y % 400 == 0 || (y % 4 == 0 && y % 100) ? 29 : 28;
int days[] = {31, v, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int ans = d;
for (int i = 0; i < m - 1; ++i) {
ans += days[i];
}
return ans;
}
};
func dayOfYear(date string) (ans int) {
var y, m, d int
fmt.Sscanf(date, "%d-%d-%d", &y, &m, &d)
days := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
if y%400 == 0 || (y%4 == 0 && y%100 != 0) {
days[1] = 29
}
ans += d
for _, v := range days[:m-1] {
ans += v
}
return
}
function dayOfYear(date: string): number {
const y = +date.slice(0, 4);
const m = +date.slice(5, 7);
const d = +date.slice(8);
const v = y % 400 == 0 || (y % 4 == 0 && y % 100) ? 29 : 28;
const days = [31, v, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
return days.slice(0, m - 1).reduce((a, b) => a + b, d);
}
/**
* @param {string} date
* @return {number}
*/
var dayOfYear = function (date) {
const y = +date.slice(0, 4);
const m = +date.slice(5, 7);
const d = +date.slice(8);
const v = y % 400 == 0 || (y % 4 == 0 && y % 100) ? 29 : 28;
const days = [31, v, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
return days.slice(0, m - 1).reduce((a, b) => a + b, d);
};