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]