目录 1154 Day of the Year 一年中的第几天描述给你一个按 YYYY-MM-DD 格式表示日期的字符串 date ,请你计算并返回该日期是当年的第几天 。 通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。 思路首先是字符串的处理 将YYYY-MM-DD 格式转换成整型的年月日 其次是天数计算 先将每月天数存入, 累加获取月份前几月的天数, 再加上获取日期的天数 平年1~12月每月天数: {31,28,31,30,31,30,31,31,30,31,30,31} 06-19 --> 06(19) 05(31) 04(30) 03(31) 02(28) 01(31) 最后是判断闰年 闰年的判断方法: 1) 被4整除, 但不被100整除 2) 被400整除 闰年的二月比平年多一天
代码实现class Solution {
// 平年 每月天数 取巧使下标与月份匹配
int[] mouths = {0,31,28,31,30,31,30,31,31,30,31,30,31};
public int dayOfYear(String date) {
if (date.length() < 10) return 0;
// 从字符串中获取年月日(整型)
int y = getNum(date, 0, 4);
int m = getNum(date, 5, 7);
int d = getNum(date, 8, 10);
// 先添加本月经过天数 在累加本月前的每月天数
// 06-19 --> 06(19) 05(31) 04(30) 03(31) 02(28) 01(31)
int ans = d;
for (int i = 1; i < m; i ) {
ans = mouths[i];
}
// 当月份过了二月 再判断年份是否是闰年
if (m >= 3) {
if ((y%4==0 && y0!=0) | (y@0==0)) ans ;
}
return ans;
}
int getNum(String str, int s, int e) {
int num = 0;
for (int i = s; i < e; i ) {
num = num*10 (str.charAt(i)-'0');
}
return num;
}
} 来源:https://www./content-4-393801.html
|