LeetCode 1360. 日期之间隔几天

题目描述

1360. 日期之间隔几天

思路分析

解法一:日期转天数(推荐)

核心思路

  • 将日期转换为从固定起点(如 1971-01-01)到该日期的天数。
  • 两日期天数差的绝对值即为结果。
  • 闰年规则与常规日期计算一致。


复杂度分析

  • 时间复杂度:O(1)。
  • 空间复杂度:O(1)。
class Solution {
    public int daysBetweenDates(String date1, String date2) {
        int d1 = daysFrom1971(date1);
        int d2 = daysFrom1971(date2);
        return Math.abs(d1 - d2);
    }

    private int daysFrom1971(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};
        int res = 0;

        for (int y = 1971; y < year; y++) {
            res += isLeap(y) ? 366 : 365;
        }
        for (int m = 1; m < month; m++) {
            res += days[m - 1];
            if (m == 2 && isLeap(year)) {
                res++;
            }
        }
        res += day;
        return res;
    }

    private boolean isLeap(int year) {
        return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
    }
}
func daysBetweenDates(date1 string, date2 string) int {
	d1 := daysFrom1971(date1)
	d2 := daysFrom1971(date2)
	if d1 > d2 {
		return d1 - d2
	}
	return d2 - d1
}

func daysFrom1971(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}
	res := 0

	for y := 1971; y < year; y++ {
		if isLeap(y) {
			res += 366
		} else {
			res += 365
		}
	}
	for m := 1; m < month; m++ {
		res += days[m-1]
		if m == 2 && isLeap(year) {
			res++
		}
	}
	res += day
	return res
}

func isLeap(year int) bool {
	return (year%400 == 0) || (year%4 == 0 && year%100 != 0)
}

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

相似题目

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