leetcode第149场周赛(8.11)

1154. 一年中的第几天

给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,请你计算并返回该日期是当年的第几天。

通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪年法(格里高利历)一致。

class Solution(object):
    def ordinalOfDate(self, date):
        """
        :type date: str
        :rtype: int
        """
        dic = {1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
        num = list(map(int,date.split('-')))
        res = 0
        flag = 0
        for i in range(len(num)):
            if i == 0:
                a = num[0]//100
                if num[0]%100 == 0:
                    if (num[0]//100)%4==0:
                        flag = 1
                elif num[0] %4 == 0:
                    flag = 1
            elif i == 1:
                for j in range(1,num[i]):
                    if j == 2 and flag == 1:
                        res += dic[j]+1
                    else:
                        res += dic[j]
            else:
                res += num[2]
        return res

1156. 单字符重复子串的最大长度

如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。

给你一个字符串 text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。

class Solution(object):
    def maxRepOpt1(self, text):
        """
        :type text: str
        :rtype: int
        """
        ans = 1
        lens = len(text)
        dic = collections.Counter(text)
        l, r = 0, 0
        while r < lens:
            k = 0
            while r < lens and text[r] == text[l]:
                r += 1
                k += 1
            if r < lens:
                if dic[text[l]] >= l-r+1:
                    r += 1
                    while r < lens and text[r] == text[l]:
                        r += 1
                    ans = max(ans, min(r-l, dic[text[l]]))
                else:
                    ans = max(ans, min(r-l, dic[text[l]]))
            else:
                ans = max(ans, r-l)
                break
            l += k
            r = l
        return ans

1155. 掷骰子的N种方法

这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, ..., f

我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。

如果需要掷出的总点数为 target,请你计算出有多少种不同的组合情况(所有的组合情况总共有 f^d 种),模 10^9 + 7 后返回。

class Solution(object):
    def numRollsToTarget(self, d, f, target):
        """
        :type d: int
        :type f: int
        :type target: int
        :rtype: int
        """
        dp = [[0]*(target+1) for _ in range(d+1)]
        dp[0][0] = 1
        for i in range(d):
            for j in range(target+1):
                for k in range(1,f+1):
                    if dp[i][j]!=0 and j+k <= target:
                        dp[i+1][j+k] += dp[i][j]
                        dp[i+1][j+k] %= 10**9+7   
        return dp[d][target]

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值