程序将Python中所有单元格所需的操作数计数为相同颜色
假设我们有一个二维矩阵M。现在每个像元中都包含一个代表其颜色的值,并且具有相同颜色的相邻像元(上,下,左,右)将被分组在一起。现在,考虑将一组中的所有单元格设置为某种颜色的操作。然后,最终找到所需的最少操作数,以使每个单元格具有相同的颜色。并且当颜色转换时,无法再次设置。
所以,如果输入像
然后输出将为2,因为我们可以将2作为颜色填充到组1中,然后用1填充3。
为了解决这个问题,我们将按照以下步骤操作:
如果矩阵为空,则
返回0
定义一个功能dfs()
。这将需要i,j,矩阵,val
n:=矩阵的行数,m:=矩阵的行数
如果i<0或i>n-1或j<0或j>m-1
返回
如果matrix[i,j]与-1相同,则
返回
如果matrix[i,j]与val相同,则
矩阵[i,j]:=-1
dfs(i,j+1,矩阵,val)
dfs(i+1,j,矩阵,val)
dfs(i,j-1,矩阵,val)
dfs(i-1,j,矩阵,val)
除此以外,
返回
从主要方法,请执行以下操作-
n:=矩阵的行数,m:=矩阵的行数
d:=空映射
对于范围在0到n-1之间的i
对于0到m-1范围内的j,执行
val:=matrix[i,j]
如果val不等于-1,则
d[val]:=d[val]+1
dfs(i,j,矩阵,val)
根据f的字典元素值对其排序
安全:=l的最后一个元素
res:=0
对于d的每个键值对k和v,执行
如果k与安全性不同,则
res:=res+v
返回资源
让我们看下面的实现以更好地理解-
示例
from collections import defaultdict class Solution: def solve(self, matrix): if not matrix: return 0 def dfs(i, j, matrix, val): n, m = len(matrix), len(matrix[0]) if i < 0 or i > n - 1 or j < 0 or j > m - 1: return if matrix[i][j] == -1: return if matrix[i][j] == val: matrix[i][j] = -1 dfs(i, j + 1, matrix, val) dfs(i + 1, j, matrix, val) dfs(i, j - 1, matrix, val) dfs(i - 1, j, matrix, val) else: return n, m = len(matrix), len(matrix[0]) d = defaultdict(int) for i in range(n): for j in range(m): val = matrix[i][j] if val != -1: d[val] += 1 dfs(i, j, matrix, val) l = sorted(d,key=lambda x: d[x]) safe = l[-1] res = 0 for k, v in d.items(): if k != safe: res += v return res ob = Solution()matrix = [ [2, 2, 2, 2], [1, 1, 1, 1], [2, 3, 2, 1] ] print(ob.solve(matrix))
输入值
matrix = [[2, 2, 2, 2],[1, 1, 1, 1],[2, 3, 2, 1]]
输出结果
2