给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day、month 和 year,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。
示例 1:
输入:day = 31, month = 8, year = 2019 输出:"Saturday" 示例 2:
输入:day = 18, month = 7, year = 1999 输出:"Sunday" 示例 3:
输入:day = 15, month = 8, year = 1993 输出:"Sunday"
提示:
给出的日期一定是在 1971 到 2100 年之间的有效日期。
Zeller 公式:
使用 Zeller 公式计算给定日期对应的星期几。具体来说,先将月份和年份进行调整,变成下面的形式:
如果月份为 1 或 2,年份减 1,月份分别变为 13 或 14 计算出对应的世纪数 century 和年份 yearOfCentury 然后将以上数值带入 Zeller 公式进行计算:
dayOfWeek = (day + 2 * month + 3 * (month + 1) / 5 + yearOfCentury + yearOfCentury / 4 - yearOfCentury / 100 + yearOfCentury / 400) % 7
计算得到的 dayOfWeek 为 0 到 6 的整数,可以对照下面的表格将其转换为具体的星期几:
0 -> "Sunday" 1 -> "Monday" 2 -> "Tuesday" 3 -> "Wednesday" 4 -> "Thursday" 5 -> "Friday" 6 -> "Saturday"
func dayOfTheWeek(day int, month int, year int) string {
if month < 3 {
month += 12
year -= 1
}
k := year % 100
j := year / 100
q := day
m := month
h := (q+(m+1)*26/10+k+k/4+j/4+5*j)%7 + 1
weekdays := []string{"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}
return weekdays[h-1]
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 1.8 MB , 在所有 Go 提交中击败了 94.44% 的用户 通过测试用例: 43 / 43 炫耀一下:
本文由 mdnice 多平台发布