其他分享
首页 > 其他分享> > [leetcode 周赛 149] 1154 一年中的第几天

[leetcode 周赛 149] 1154 一年中的第几天

作者:互联网

目录

1154 Day of the Year 一年中的第几天

描述

给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,请你计算并返回该日期是当年的第几天

通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。

思路

代码实现

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 && y%100!=0) | (y%400==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;
    }
}

标签:周赛,01,第几天,int,1154,31,30,天数,date
来源: https://www.cnblogs.com/slowbirdoflsh/p/11363859.html