Post

1704 Special Positions In A Binary Matrix

1704 Special Positions In A Binary Matrix

Special Positions in a Binary Matrix image

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:

image

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:

image

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.