# LeetCode 1582. Special Positions in a Binary Matrix

## Description

https://leetcode.com/problems/special-positions-in-a-binary-matrix/

Given a `rows x cols` matrix `mat`, where `mat[i][j]` is either `0` or `1`, 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:

```Input: mat = [[1,0,0],
[0,0,1],
[1,0,0]]
Output: 1
Explanation: (1,2) is a special position because mat == 1 and all other elements in row 1 and column 2 are 0.
```

Example 2:

```Input: mat = [[1,0,0],
[0,1,0],
[0,0,1]]
Output: 3
Explanation: (0,0), (1,1) and (2,2) are special positions.
```

Example 3:

```Input: mat = [[0,0,0,1],
[1,0,0,0],
[0,1,1,0],
[0,0,0,0]]
Output: 2
```

Example 4:

```Input: mat = [[0,0,0,0,0],
[1,0,0,0,0],
[0,1,0,0,0],
[0,0,1,0,0],
[0,0,0,1,1]]
Output: 3
```

Constraints:

• `rows == mat.length`
• `cols == mat[i].length`
• `1 <= rows, cols <= 100`
• `mat[i][j]` is `0` or `1`.

## Explanation

Find all the positions which are the only ‘1’ in their rows and check if these position are also the only ‘1’ in their columns.

## Python Solution

``````class Solution:
def numSpecial(self, mat: List[List[int]]) -> int:
result = 0

special_rows = []

for i in range(len(mat)):
row = mat[i]

count = row.count(1)

if count == 1:
j = row.index(1)

special_rows.append([i, j])

for x, y in special_rows:

is_special = True
for i in range(0, len(mat)):
if i != x and mat[i][y] == 1:

is_special = False
break

if is_special:
result += 1

return result
``````
• Time Complexity: O(N).
• Space Complexity: O(1).