文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。如果需要我的源码,欢迎从我的github下载。
这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。
相关文章:
文章目录:
题目描述:
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 日。
/**
* 每年天数
*
* @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)
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)
/**
* 日期是一年中的多少天
*
* @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)
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