IOS 算法(基础篇) ----- 一年中的第几天

151 阅读1分钟

给你一个字符串 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)