广州做网页的公司,企业网站优化的原则,免费网站建设模板下载,自己做的网站提示不安全吗【LetMeFly】1154.一年中的第几天#xff1a;2023年最后一道每日一题
力扣题目链接#xff1a;https://leetcode.cn/problems/day-of-the-year/
给你一个字符串 date #xff0c;按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1…【LetMeFly】1154.一年中的第几天2023年最后一道每日一题
力扣题目链接https://leetcode.cn/problems/day-of-the-year/
给你一个字符串 date 按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1
输入date 2019-01-09
输出9
解释给定日期是2019年的第九天。
示例 2
输入date 2019-02-10
输出41提示
date.length 10date[4] date[7] -其他的 date[i] 都是数字date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日
方法一日期处理
首先明确一年中的12个月分别有几天以非闰年为例dayOfMonth [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]。
如果是闰年那么2月有29天dayOfMonth[1] 29。
怎么判断一年是否为闰年呢
如果年份是100的倍数则只有年份为400的倍数时为闰年否则年份为4的倍数时为闰年
从给定字符串中我们可以很方便地“分离出”年y月m日d从1月到m - 1月累加这个月的天数再加上d即为答案。
时间复杂度 O ( 1 ) O(1) O(1)将一年的12个月视为常数空间复杂度 O ( 1 ) O(1) O(1)
AC代码
C
class Solution {
private:int dayOfMonth[12] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool isRunNian(int y) {if (y % 100 0) {return y % 400 0;}return y % 4 0;}public:int dayOfYear(string date) {int y, m, d;sscanf(date.c_str(), %d-%d-%d, y, m, d);if (isRunNian(y)) {dayOfMonth[1] 29;}int ans 0;for (int i 1; i m; i) {ans dayOfMonth[i - 1];}ans d;return ans;}
};Python
class Solution:def ifRunNian(self, y: int) - bool:if y % 100 0:return y % 400 0return y % 4 0def dayOfYear(self, date: str) - int:dayOfMonth [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]y, m, d map(int, date.split(-))if self.ifRunNian(y):dayOfMonth[1] 29ans 0for i in range(1, m):ans dayOfMonth[i - 1]ans dreturn ans同步发文于CSDN原创不易转载经作者同意后请附上原文链接哦~ Tisfyhttps://letmefly.blog.csdn.net/article/details/135315004