zoukankan      html  css  js  c++  java
  • [leetcode 周赛 149] 1154 一年中的第几天

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

    描述

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

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

    • 示例 1:

    输入:date = "2019-01-09"
    输出:9

    • 示例 2:

    输入:date = "2019-02-10"
    输出:41

    • 示例 3:

    输入:date = "2003-03-01"
    输出:60

    • 示例 4:

    输入:date = "2004-03-01"
    输出:61

    • 提示:
      date.length == 10
      date[4] == date[7] == '-',其他的 date[i] 都是数字。
      date 表示的范围从 1900 年 1 月 1 日2019 年 12 月 31 日

    思路

    • 首先是字符串的处理
      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 && 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;
        }
    }
    
  • 相关阅读:
    线程的两种实现方法
    wait() 与 sleep
    【BZOJ4566】找相同字符(后缀数组)
    【BZOJ2555】SubString(后缀自动机,Link-Cut Tree)
    【HDU4622】Reincarnation(后缀自动机)
    【SPOJ】Substrings(后缀自动机)
    【SPOJ】Longest Common Substring II (后缀自动机)
    【SPOJ】Longest Common Substring(后缀自动机)
    【Luogu3804】【模板】后缀自动机(后缀自动机)
    【SPOJ】Distinct Substrings(后缀自动机)
  • 原文地址:https://www.cnblogs.com/slowbirdoflsh/p/11363859.html
Copyright © 2011-2022 走看看