1185. 一周中的第几天

93 阅读1分钟

题目:
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

输入为三个整数:daymonth 和 year,分别表示日、月、年。

您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}

算法:

方法一:模拟
知识点:

  1. 闰年的判断方法,四年一闰,百年不闰,四百年又闰.
  2. 闰年二月多一天
  3. 1971/1/1是星期五这件事要查询。

有些要用到的信息需要通过搜索引擎查到,题目中信息没给全。面试中可以问面试官。

func dayOfTheWeek(day int, month int, year int) string {
    result := []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
    monthDay := []int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    // 1971年1月1日星期五,保证days + day = 5,初始化days = 4
    days := 4
    // 处理年份
    for i := 1971; i < year; i ++ {
        if (i % 4 == 0 && i % 100 != 0) || i % 400 == 0 {
            days = days + 366
        } else {
            days = days + 365
        }
    }
    // 处理月份
    for i := 1; i < month; i ++ {
        days = days + monthDay[i - 1]
        // 闰二月多一天
        if i == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ) {
            days = days + 1
        }
    }
    // 处理天
    days = days + day
    return result[days % 7]
}