leetcode每日一题1154. 一年中的第几天 暴力枚举
写在前面
又到年末了呀,感慨这一年过得是挺快的,按照往常一样,零点睡不着就打开了力扣去刷题,每日一题让我定睛一亮,今天是今年的多少天~我记得这貌似是哪年的蓝桥杯题,不管了老样子 暴力枚举就好了…
题目
给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。
请你计算并返回该日期是当年的第几天。
通常情况下,我们认为 1 月 1 日是每年的第 1 天,
1 月 2 日是每年的第 2 天,依此类推。
每个月的天数与现行公元纪年法(格里高利历)一致。
示例
示例1:
输入:date = "2019-01-09"
输出:9
示例2:
输入:date = "2019-02-10"
输出:41
示例3:
输入:date = "2003-03-01"
输出:60
提示
date.length == 10
date[4] == date[7] == '-',其他的 date[i] 都是数字
date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日
思路
这种题我感觉我没啥其他的思路 虽然可以使用API但是违背了刷题的初衷
所幸 暴力求解
同时 也对枚举进行了复习
也是一个不错的题例
代码实现
暴力求解:
class Solution {
public int dayOfYear(String date) {
//对年月日分别进行获取 按照题来 值得注意substring是左闭右开区间
int year = Integer.parseInt(date.substring(0, 4));
int month = Integer.parseInt(date.substring(5, 7));
int day = Integer.parseInt(date.substring(8));
//对平年的每个月有多少天进行枚举
int[] enumDay = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//判断如果是闰年的话 就使得二月加上一天
if (year % 4 == 0) {
enumDay [1]++;
}
int result = 0;
//遍历求和返回天数总和
for (int i = 0; i < month - 1; i++) {
result += enumDay[i];
}
return result + day;
}
}
代码优化
优化可以从闰年的计算来进行
这里就交给各位兄台自行完成啦
简化时间复杂度 从你我做起
写在最后
每日一题 从我做起
每天进步点 每天收获点
愿诸君 事业有成 学有所获
如果觉得不错 别忘啦一键三连哦~
今天可是有供暖期的一天哦~