1. 解题思路
这一题就是一个动态规划的思路,我们只需要对每一列取0到9的情况各自进行一下讨论,然后看和当前元素当中重复度最高的一个既是我们目标的情况,将其返回即可。
2. 代码实现
给出python代码实现如下:
class Solution:
def minimumOperations(self, grid: List[List[int]]) -> int:
n, m = len(grid), len(grid[0])
cnt = [[0 for _ in range(m)] for _ in range(10)]
for i in range(n):
for j in range(m):
cnt[grid[i][j]][j] += 1
@lru_cache(None)
def dp(idx, pre):
if idx >= m:
return 0
ans = 0
for i in range(10):
if i == pre:
continue
ans = max(ans, cnt[i][idx] + dp(idx+1, i))
return ans
return n * m - dp(0, -1)
提交代码评测得到:耗时2431ms,占用内存51.1MB。
本文介绍了如何使用动态规划解决LeetCode问题3122,通过遍历矩阵并计算每个数字在每列的出现次数,找到重复度最高的数字作为目标,最后计算操作次数。给出了Python代码实现,并分析了其时间复杂度和内存占用情况。
515

被折叠的 条评论
为什么被折叠?



