题目如下:
Given a
rows x cols
matrixmat
, wheremat[i][j]
is either0
or1
, return the number of special positions inmat
.A position
(i,j)
is called special ifmat[i][j] == 1
and all other elements in rowi
and columnj
are0
(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][2] == 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: 2Example 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: 3Constraints:
rows == mat.length
cols == mat[i].length
1 <= rows, cols <= 100
mat[i][j]
is0
or1
.
解题思路:很简单的题目。我的方法是先把各行各列的和算出来,然后遍历matrix,如果matrix[i][j] = 1 并且第i行以及第j列的和都为1,则表示这是一个special position。
代码如下:
class Solution(object): def numSpecial(self, mat): """ :type mat: List[List[int]] :rtype: int """ res = 0 dic_row = {} dic_col = {} for i in range(len(mat)): if sum(mat[i]) == 1: dic_row[i] = 1 for j in range(len(mat[0])): amount = 0 for i in range(len(mat)): amount += mat[i][j] if amount == 1:dic_col[j] = 1 for i in range(len(mat)): for j in range(len(mat[i])): if mat[i][j] == 1 and i in dic_row and j in dic_col: res += 1 return res