美文网首页
IOS 算法(基础篇) ----- 一年中的第几天

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

作者: ShawnAlex | 来源:发表于2021-12-21 10:48 被阅读0次

    给你一个字符串 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 算法合集地址

    相关文章

      网友评论

          本文标题:IOS 算法(基础篇) ----- 一年中的第几天

          本文链接:https://www.haomeiwen.com/subject/mbtxqrtx.html