目录

0533:孤独像素 II(★)

力扣第 533 题

题目

给你一个大小为 m x n 的二维字符数组 picture ,表示一张黑白图像,数组中的 'B' 表示黑色像素,'W' 表示白色像素。另给你一个整数 target ,请你找出并返回符合规则的 黑色 孤独像素的数量。

黑色孤独像素是指位于某一特定位置 (r, c) 的字符 'B' ,其中:

  • r 和列 c 中的黑色像素恰好有 target 个。
  • c 中所有黑色像素所在的行必须和行 r 完全相同。

示例 1:

输入:picture = [["W","B","W","B","B","W"],["W","B","W","B","B","W"],["W","B","W","B","B","W"],["W","W","B","W","B","W"]], target = 3
输出:6
解释:所有绿色的 'B' 都是我们所求的像素(第 1 列和第 3 列的所有 'B' )
以行 r = 0 和列 c = 1 的 'B' 为例:
- 规则 1 ,行 r = 0 和列 c = 1 都恰好有 target = 3 个黑色像素
- 规则 2 ,列 c = 1 的黑色像素分别位于行 0,行 1 和行 2。和行 r = 0 完全相同。

示例 2:

输入:picture = [["W","W","B"],["W","W","B"],["W","W","B"]], target = 1
输出:0

提示:

  • m == picture.length
  • n == picture[i].length
  • 1 <= m, n <= 200
  • picture[i][j]'W''B'
  • 1 <= target <= min(m, n)

分析

  • 把一列的黑色像素提取出来得到数组 A
  • 如果 len(A)!=target,直接排除掉
  • 否则,查看这些像素对应的行,如果这些都一样且每行都有 len(A) 个黑色像素,那么 A 中的黑色像素符合要求

解答

1
2
3
4
5
6
7
8
def findBlackPixel(self, picture: List[List[str]], target: int) -> int:
	res, m, n = 0, len(picture), len(picture[0])
	rows = [''.join(row) for row in picture]
	for j in range(n):
		A = [rows[i] for i in range(m) if picture[i][j]=='B']
		if len(A)==target==A[0].count('B') and len(set(A))==1: 
			res += target
	return res

60 ms