LeetCode:1154.Day Of Year(日期为一年中多少天)

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。如果需要我的源码,欢迎从我的github下载。

这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

相关文章:

  1. LeetCode:55. Jump Game(跳远比赛)
  2. Leetcode:300. Longest Increasing Subsequence(最大增长序列)
  3. LeetCode:560. Subarray Sum Equals K(找出数组中连续子串和等于k)

文章目录:

题目描述:

java实现方式1:

python实现方式1:

java实现方式2:

python实现方式2:

源码地址:


​​​​​​​题目描述:

给你一个按 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 日。


java实现方式1:

  /**
     * 每年天数
     *
     * @param date 日期
     * @return 数字
     */
    public int dayOfYear(String date) {
        String[] strs = date.split("-");
        int year = Integer.parseInt(strs[0]);
        int month = Integer.parseInt(strs[1]);
        int day = Integer.parseInt(strs[2]);
        LocalDate d = LocalDate.of(year, month, day);
        return d.getDayOfYear();
    }

时间复杂度:O(n)

空间复杂度:O(1)


python实现方式1:

def day_of_year(date: str) -> int:
    '''
        计算一年中为第多少天
    Args:
        date: 日期
    Returns:
        一年中的第多少天
    '''
    dd = datetime.datetime.strptime(date, "%Y-%m-%d")
    return dd.timetuple().tm_yday

时间复杂度:O(n)

空间复杂度:O(1)


java实现方式2:

   /**
     * 日期是一年中的多少天
     *
     * @param date 日期
     * @return number
     */
    public int dayOfYear3(String date) {
        String[] strs = date.split("-");
        int year = Integer.valueOf(strs[0]);
        int month = Integer.valueOf(strs[1]);
        int day = Integer.valueOf(strs[2]);
        int days = 0;

        if (isLeep(year)) {
            int[] dayOfMonths = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            for (int i = 0; i < month - 1; i++) {
                days += dayOfMonths[i];
            }
        } else {
            int[] dayOfMonths = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            for (int i = 0; i < month - 1; i++) {
                days += dayOfMonths[i];
            }
        }
        days += day;
        return days;

    }

    /**
     * 判断是否是闰年
     *
     * @param year 输入年
     * @return 返回布尔值
     */
    private boolean isLeep(int year) {
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            return true;
        } else {
            return false;
        }
    }

时间复杂度:O(1)

空间复杂度:O(1)


python实现方式2:

def day_of_year3(date: str) -> int:
    '''
        计算一年中为第多少天
    Args:
        date: 日期
    Returns:
        一年中的第多少天
    '''
    year, month, day = date.split('-')
    days = 0
    day_months = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if is_leep(int(year)):
        day_months[2] += 1
        for i in range(int(month)):
            days += day_months[i]
    else:
        for i in range(int(month)):
            days += day_months[i]
    days += int(day)
    return days


def is_leep(year: int) -> bool:
    '''
        判断是不是闰年
    Args:
        year: 年
    Returns:
        布尔值
    '''
    return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0

时间复杂度:O(1)

空间复杂度:O(1)


源码地址:

https://github.com/zhangyu345293721/leetcode

你可能感兴趣的:(java,python)