1704 Special Positions In A Binary Matrix
1704 Special Positions In A Binary Matrix
Special Positions in a Binary Matrix 
Given an m x n binary matrix mat, return the number of special positions in *mat.*
A position (i, j) is called special if mat[i][j] == 1 and all other elements in row i and column j are 0 (rows and columns are 0-indexed).
Example 1:
1
2
3
4
5
**Input:** mat = [[1,0,0],[0,0,1],[1,0,0]]
**Output:** 1
**Explanation:** (1, 2) is a special position because mat[1][2] == 1 and all other elements in row 1 and column 2 are 0.
Example 2:
1
2
3
4
5
**Input:** mat = [[1,0,0],[0,1,0],[0,0,1]]
**Output:** 3
**Explanation:** (0, 0), (1, 1) and (2, 2) are special positions.
Constraints:
1
2
3
4
m == mat.length
n == mat[i].length
1 <= m, n <= 100
mat[i][j] is either 0 or 1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use itertools::enumerate;
impl Solution {
pub fn num_special(mat: Vec<Vec<i32>>) -> i32 {
let mut res = 0;
for (i, row) in enumerate(&mat) {
for (j, &val) in enumerate(row) {
// Only consider cells that are 1
if val != 1 {
continue;
}
// Check no other 1 exists in row i
let row_ok = mat[i].iter().filter(|&&x| x == 1).count() == 1;
// Check no other 1 exists in column j
let col_ok = mat.iter().filter(|r| r[j] == 1).count() == 1;
if row_ok && col_ok {
res += 1;
}
}
}
res
}
}
This post is licensed under CC BY 4.0 by the author.

