难度:中等
圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。
给你两个整数 tomatoSlices 和 cheeseSlices,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下:
请你以 [total_jumbo, total_small]([巨无霸汉堡总数,小皇堡总数])的格式返回恰当的制作方案,使得剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlices 的数量都是 0。
如果无法使剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlices 的数量为 0,就请返回 []。
示例 1:
输入:tomatoSlices = 16, cheeseSlices = 7
输出:[1,6]
解释:制作 1 个巨无霸汉堡和 6 个小皇堡需要 41 + 26 = 16 片番茄和 1 + 6 = 7 片奶酪。不会剩下原料。
示例 2:
输入:tomatoSlices = 17, cheeseSlices = 4
输出:[]
解释:只制作小皇堡和巨无霸汉堡无法用光全部原料。
示例 3:
输入:tomatoSlices = 4, cheeseSlices = 17
输出:[]
解释:制作 1 个巨无霸汉堡会剩下 16 片奶酪,制作 2 个小皇堡会剩下 15 片奶酪。
示例 4:
输入:tomatoSlices = 0, cheeseSlices = 0
输出:[0,0]
示例 5:
输入:tomatoSlices = 2, cheeseSlices = 1
输出:[0,1]
提示:
解决方案:
class Solution:
def numOfBurgers(self, tomatoSlices: int, cheeseSlices: int) -> List[int]:
res = []
if tomatoSlices%2 != 0:
return res
x = tomatoSlices//2 - cheeseSlices
y = 2 * cheeseSlices - tomatoSlices//2
if x < 0 or y < 0:
return res
res.append(x)
res.append(y)
return res
执行用时 | 内存消耗 | 语言 |
---|---|---|
64 ms | 13.7 MB | Python3 |
难度:中等
给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。
示例 1:
输入:matrix =
[
[0,1,1,1],
[1,1,1,1],
[0,1,1,1]
]
输出:15
解释:
边长为 1 的正方形有 10 个。
边长为 2 的正方形有 4 个。
边长为 3 的正方形有 1 个。
正方形的总数 = 10 + 4 + 1 = 15.
示例 2:
输入:matrix =
[
[1,0,1],
[1,1,0],
[1,1,0]
]
输出:7
解释:
边长为 1 的正方形有 6 个。
边长为 2 的正方形有 1 个。
正方形的总数 = 6 + 1 = 7.
提示:
解决方案:
class Solution:
def countSquares(self, matrix: List[List[int]]) -> int:
n=len(matrix)
m=len(matrix[0])
ans=0
for i in range(0,m):
ans+=matrix[0][i]
for i in range(1,n):
ans+=matrix[i][0]
for i in range(1,n):
for j in range(1,m):
if matrix[i][j]:
matrix[i][j]=min(matrix[i-1][j-1],matrix[i][j-1],matrix[i-1][j])+1
ans+=matrix[i][j]
return ans
执行用时 | 内存消耗 | 语言 |
---|---|---|
864 ms | 16 MB | Python3 |
难度:困难
给你一个由小写字母组成的字符串 s,和一个整数 k。
请你按下面的要求分割字符串:
请返回以这种方式分割字符串所需修改的最少字符数。
示例 1:
输入:s = “abc”, k = 2
输出:1
解释:你可以把字符串分割成 “ab” 和 “c”,并修改 “ab” 中的 1 个字符,将它变成回文串。
示例 2:
输入:s = “aabbc”, k = 3
输出:0
解释:你可以把字符串分割成 “aa”、“bb” 和 “c”,它们都是回文串。
示例 3:
输入:s = “leetcode”, k = 8
输出:0
提示:
解决方案(来自网友):
class Solution:
def palindromePartition(self, s: str, k: int) -> int:
n=len(s)
cost=[[0]*n for _ in range(n)]
t=0
for t in range(1,n):
for i in range(0,n-t):
j=i+t
cost[i][j]=cost[i+1][j-1]+(s[i]!=s[j])
dp=[[0]*k for _ in range(n)]
for i in range(n):
dp[i][0]=cost[0][i]
for i in range(0,n):
for j in range(1,k):
m=float("inf")
for l in range(j-2,i):
m=min(m,cost[l+1][i]+dp[l][j-1])
dp[i][j]=m
return dp[-1][-1]