本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。
3536. 两个数字的最大乘积 - 力扣(LeetCode)
解题思路
暴力遍历,或排序后取两个最值
示例代码
python
class Solution:
def maxProduct(self, n: int) -> int:
nums = list(map(int, str(n)))
ans = 0
for p in combinations(range(len(nums)), 2):
x, y = p
ans = max(ans, nums[x] * nums[y])
return ans
python
class Solution:
def maxProduct(self, n: int) -> int:
return reduce(mul, sorted(map(int, str(n)))[-2:])
3537. 填充特殊网格 - 力扣(LeetCode)
解题思路
递归,不断折半矩阵长度,当d==2
时,填写矩阵
示例代码
python
class Solution:
def specialGrid(self, N: int) -> List[List[int]]:
m = pow(2, N)
ans = [[0] * m for _ in range(m)]
cnt = m * m - 1
def dfs(i, j, d):
nonlocal cnt
if d == 1:
return
if d == 2:
for ni, nj in (i, j), (i + 1, j), (i + 1, j + 1), (i, j + 1):
ans[ni][nj] = cnt
cnt -= 1
return
d = d // 2
dfs(i, j, d)
dfs(i + d, j, d)
dfs(i + d, j + d, d)
dfs(i, j + d, d)
return
dfs(0, 0, m)
return ans
3538. 合并得到最小旅行时间 - 力扣(LeetCode)
解题思路
记忆化搜索,划分型 DP
- i,当前索引
- j,剩余合并次数
- p,前一个索引
示例代码
python
class Solution:
def minTravelTime(self, l: int, n: int, k: int, position: List[int], time: List[int]) -> int:
pre = list(accumulate(time, initial=0))
@cache
def dfs(i: int, j: int, p: int) -> int:
if i == n - 1:
return inf if j else 0
res = inf
t = pre[i + 1] - pre[p]
for ni in range(i + 1, min(n, i + j + 2)):
res = min(res, (position[ni] - position[i]) * t + dfs(ni, j - (ni - i - 1), i + 1))
return res
ans = dfs(0, k, 0)
dfs.cache_clear()
return ans
3539. 魔法序列的数组乘积之和 - 力扣(LeetCode)
解题思路
参考:
示例代码
python
TODO