跳到主要内容

1185.一周中的第几天

链接:1185.一周中的第几天
难度:Easy
标签:数学
简介:给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

题解 1 - cpp

  • 编辑时间:2022-01-04
  • 内存消耗:5.9MB
  • 编程语言:cpp
  • 解法介绍:遍历求出距离第一天的天数并取模。
string names[] = {"Friday",  "Saturday",  "Sunday",  "Monday",
"Tuesday", "Wednesday", "Thursday"};
int isLeapYear(int year) {
return year % 400 == 0 || year % 100 != 0 && year % 4 == 0;
}
class Solution {
public:
string dayOfTheWeek(int day, int month, int year) {
int months[] = {
0, 31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31,
30, 31};
while (month) day += months[--month];
while (year > 1971) day += isLeapYear(--year) ? 366 : 365;
return names[(day - 1) % 7];
}
};

题解 2 - python

  • 编辑时间:2023-12-30
  • 执行用时:36ms
  • 内存消耗:17.09MB
  • 编程语言:python
  • 解法介绍:计算天数后取模。
def isLeapYear(year: int) -> bool:
return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0
weeks = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

class Solution:
def dayOfTheWeek(self, day: int, month: int, year: int) -> str:
months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]
if isLeapYear(year): months[1] = 29
day += sum(365 + isLeapYear(y) for y in range(1971, year)) + sum(months[:month - 1])
return weeks[(day + 3) % 7]