LeetCode每日一题
2023年的最后一题
1154.一年中的第几天
描述
给你一个字符串 date
,按 YYYY-MM-DD
格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。
示例 1:
输入:date = "2019-01-09"
输出:9
解释:给定日期是2019年的第九天。
示例 2:
输入:date = "2019-02-10"
输出:41
提示:
date.length == 10
date[4] == date[7] == '-'
,其他的date[i]
都是数字date
表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日
思路
根据给出的date,获取年份(YYYY),月份(MM),天数(DD)
先按平年。即每年365天计算出每个月之前的天数,然后再判断年份是否为闰年,为闰年并且月份大于等于3,则在天数上加1.
代码
C++
C++
class Solution {
public:
int dayOfYear(string date) {
int year = getNum(0,4,date);
int month = getNum(5,7,date);
int day = getNum(8,10,date);
// 每个月之前的总天数
vector<int> daysBeforeMonth = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
int days = daysBeforeMonth[month - 1] + day;
if((year % 400 ==0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) days++;
return days;
}
// 根据给定范围提取对应的数字
int getNum(int start, int end , string date){
int number = 0;
for(int i = start; i < end; i++){
number *= 10;
number += date[i] - '0';
}
return number;
}
};
Java
charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
java
class Solution {
public int dayOfYear(String date) {
int year = getNum(0,4,date);
int month = getNum(5,7,date);
int day = getNum(8,10,date);
// 每月之前的总天数
int[] daysBeforeMonth = new int[]{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
int days = daysBeforeMonth[month - 1] + day;
if((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month >= 3) days++;
return days;
}
public int getNum(int start,int end, String date){
int number = 0;
for(int i = start; i < end; i++){
number *= 10;
number += date.charAt(i) - '0';
}
return number;
}
}