LeetCode 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. 各位相加 | 简单 | 数学 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!