【教3妹学编程-算法题】一年中的第几天

【教3妹学编程-算法题】一年中的第几天_第1张图片

3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”
2哥 :3妹,什么事呀这么开森。
3妹:2哥你看今天的天气多好啊,经过了一周多的寒潮,天气总算暖和些了。
2哥:是啊,都说一九二九不出手,三九四九冰上走,这才一九就已经可以冰上走了。
3妹:上海这边虽然也挺冷了,但是还算好,想想北方都已经泼水成冰啦!
2哥:泼水成冰好玩是好玩,但是一定要注意防寒哦,看新闻都有人冻伤了。
3妹:是啊,还是待在室内比较好
2哥:给你出了一道题发你微信里了, 上班通勤的路上记得看一下,回来问你答案~
【教3妹学编程-算法题】一年中的第几天_第2张图片
3妹:知道啦,难不倒我!

题目:

给你一个字符串 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 日

思路:

【教3妹学编程-算法题】一年中的第几天_第3张图片

根据题意,直接计算:
我们首先从给定的字符串 date中提取出年 year,月 month以及日 day。

这样一来,我们就可以首先统计到 month 的前一个月为止的天数。这一部分只需要使用一个长度为 12的数组,预先记录每一个月的天数,再进行累加即可。随后我们将答案再加上 day,就可以得到 date是一年中的第几天。

需要注意的是,如果 year是闰年,那么二月份会多出一天。闰年的判定方法为:year是 400的倍数,或者 year 是 4 的倍数且不是 100的倍数。

java代码:


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));

        int[] amount = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            ++amount[1];
        }

        int ans = 0;
        for (int i = 0; i < month - 1; ++i) {
            ans += amount[i];
        }
        return ans + day;
    }
}


你可能感兴趣的:(算法)