我假设我仅仅知道今日(2019年9月8日)为周日。
python代码如下:闰年判断时的一个小bug让我没拿到分。
class Solution(object):
def isRun(self, year):
if year % 400 == 0:
return True
if year % 4 == 0 and year %100 != 0:
# !
return True
def daysInYear(self, year):
if self.isRun(year):
return 366
else:
return 365
def daysInSameYear(self, isRun, day1, month1, day2, month2):
if isRun:
daysInMonth = {1: 31, 2: 29, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10: 31, 11:30, 12: 31}
else:
daysInMonth = {1: 31, 2: 28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10: 31, 11:30, 12: 31}
if month1 == month2:
# day2 is before day1
if day2 < day1:
return True, abs(day1 - day2)
else:
return False, abs(day1 - day2)
else:
return_value = 0
for month in range(min(month1, month2) + 1, max(month1, month2)):
return_value += daysInMonth[month]
if month1 > month2:
minday = day2
maxday = day1
before = True
else:
minday = day1
maxday = day2
before = False
return_value += self.daysInSameYear(isRun, minday, min(month1, month2), daysInMonth[min(month1, month2)], min(month1, month2))[1]
return_value += self.daysInSameYear(isRun, maxday, max(month1, month2), 1, max(month1, month2))[1]
return_value += 1
return before, return_value
def numberOfDays(self, day, month, year):
return_value = 0
before = True
# 2019/9/8
if year > 2019:
for y in range(2019+1, year):
return_value += self.daysInYear(y)
return_value += self.daysInSameYear(self.isRun(2019), 8, 9, 31, 12)[1]
return_value += self.daysInSameYear(self.isRun(year), 1, 1, day, month)[1]
return_value += 1
before = False
return before, return_value
elif year < 2019:
for y in range(year+1, 2019):
return_value += self.daysInYear(y)
return_value += self.daysInSameYear(self.isRun(year), day, month, 31, 12)[1]
return_value += self.daysInSameYear(self.isRun(2019), 8, 9, 1, 1)[1]
return_value += 1
before = True
return before, return_value
else:
return self.daysInSameYear(self.isRun(2019), 8, 9, day, month)
def dayOfTheWeek(self, day, month, year):
"""
:type day: int
:type month: int
:type year: int
:rtype: str
"""
before, num_days = self.numberOfDays(day, month, year)
value = num_days % 7
if before:
if value == 0: return "Sunday"
elif value == 1: return "Saturday"
elif value == 2: return "Friday"
elif value == 3: return "Thursday"
elif value == 4: return "Wednesday"
elif value == 5: return "Tuesday"
elif value == 6: return "Monday"
else:
if value == 0: return "Sunday"
elif value == 1: return "Monday"
elif value == 2: return "Tuesday"
elif value == 3: return "Wednesday"
elif value == 4: return "Thursday"
elif value == 5: return "Friday"
elif value == 6: return "Saturday"