LeetCode 1154. 一年中的第几天

题目描述

1154. 一年中的第几天

思路分析

解法一:日期计算(推荐)

核心思路

  • 解析 YYYY-MM-DD,累加前面月份天数。
  • 判断闰年:能被 400 整除或能被 4 整除但不能被 100 整除。
  • 若闰年且月份大于 2,额外加 1。


复杂度分析

  • 时间复杂度:O(1)。
  • 空间复杂度:O(1)。
class Solution {
    public int dayOfYear(String date) {
        int year = Integer.parseInt(date.substring(0, 4));
        int month = Integer.parseInt(date.substring(5, 7));
        int day = Integer.parseInt(date.substring(8, 10));

        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        boolean leap = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);

        int sum = 0;
        for (int i = 0; i < month - 1; i++) {
            sum += days[i];
        }
        if (leap && month > 2) {
            sum++;
        }

        return sum + day;
    }
}
func dayOfYear(date string) int {
	year := atoi(date[0:4])
	month := atoi(date[5:7])
	day := atoi(date[8:10])

	days := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
	leap := (year%400 == 0) || (year%4 == 0 && year%100 != 0)

	sum := 0
	for i := 0; i < month-1; i++ {
		sum += days[i]
	}
	if leap && month > 2 {
		sum++
	}

	return sum + day
}

func atoi(s string) int {
	val := 0
	for i := 0; i < len(s); i++ {
		val = val*10 + int(s[i]-'0')
	}
	return val
}

相似题目

题目 难度 考察点
1154. 一年中的第几天 简单 日期计算
1360. 日期之间隔几天 简单 日期计算
1185. 一周中的第几天 简单 日期计算
1893. 检查是否区域内所有整数都被覆盖 简单 计数
258. 各位相加 简单 数学
本文作者:
本文链接: https://hgnulb.github.io/blog/2021/64190381
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!