返回介绍

solution / 1100-1199 / 1154.Day of the Year / README_EN

发布于 2024-06-17 01:03:22 字数 4692 浏览 0 评论 0 收藏 0

1154. Day of the Year

中文文档

Description

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)$.

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);
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文