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]