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]

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章