问题描述:
- 给定一个大小为
rows x cols
的矩阵 mat
,其中 mat[i][j]
是 0
或 1
,返回矩阵 mat
中特殊位置的数目。
- 特殊位置定义:如果
mat[i][j] == 1
并且第 i
行和第 j
列中的所有其他元素均为 0
(行和列的下标均从 0
开始),则位置 (i, j)
被称为特殊位置。
核心思路:
- 该题可以直接暴力搜索所有情况。
- 但还有方法进行加速,先预处理出每一行和列的和来快速的得到每一行和列中的
1
的个数。
代码实现:
class Solution
{
public:
int numSpecial(vector<vector<int>>& mat)
{
int m = mat.size();
int n = mat[0].size();
vector<int> row(m);
vector<int> col(n);
for(int i = 0; i < m; ++i) for(int j = 0; j < n; ++j)
row[i] += mat[i][j], col[j] += mat[i][j];
int ans = 0;
for(int i = 0; i < m; ++i) if(row[i] == 1)
{
for(int j = 0; j < n; ++j)
if(col[j] == 1 and mat[i][j] == 1) ++ans;
}
return ans;
}
};