给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。请你计算并返回该日期是当年的第几天。通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。
date.length == 10
date[4] == date[7] == '-',其他的 date[i] 都是数字
date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日
例子
输入:date = "2019-01-09"
输出:9
输入:date = "2019-02-10"
输出:41
输入:date = "2003-03-01"
输出:60
输入:date = "2004-03-01"
输出:61
解题思路
题意不难理解, 遍历法即可, 留意下闰年2月是29天即可
代码
未翻译版
func dayOfYear(_ date: String) -> Int {
var res = 0, monthArr = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
let time = date.split(separator: "-"),
y = Int(time[0])!, m = Int(time[1])!, d = Int(time[2])!
if y % 400 == 0 || (y % 4 == 0 && y % 100 != 0) {
monthArr[1] = 29
}
for i in 0 ..< m - 1 {
res += monthArr[i]
}
return res + d
}
翻译版
func dayOfYear(_ date: String) -> Int {
// 定义结果res
// 定义月数组monthArr, 数组为每月天数
var res = 0, monthArr = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
// 分割字符串获得年月日
let time = date.split(separator: "-"),
y = Int(time[0])!, m = Int(time[1])!, d = Int(time[2])!
// 闰年2月份为29天
if y % 400 == 0 || (y % 4 == 0 && y % 100 != 0) {
monthArr[1] = 29
}
// 获得当前月之前的天数
for i in 0 ..< m - 1 {
res += monthArr[i]
}
// 返回结果
return res + d
}
题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址
网友评论