Leetcode练习:第 153 场周赛第二题:一周中的第几天

我假设我仅仅知道今日(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"

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值