二进制矩阵中的特殊位置
一、题目描述
给一个矩阵mat,其中的元素都为0或1。找出其中的特殊位置的个数。特殊位置就是此位置为1,所在行和列其余位置都为0;返回有几个这样的位置。
实例
输入:mat = [[1,0,0],
[0,0,1],
[1,0,0]]
输出:1
输入:mat = [[1,0,0],
[0,1,0],
[0,0,1]]
输出:3
输入:mat = [[0,0,0,1],
[1,0,0,0],
[0,1,1,0],
[0,0,0,0]]
输出:2
二、题目分析
要满足题目要求,每行每列都只有一个1,其余为零,为1的位置比较好找。关键在于如何满足元素1在所在的行和列的唯一性。
三、解题思路
方法1
通过枚举法找到所有元素1的位置。计算每一列和每一行的和。如果和为1,则证明此列此行只有一个1。满足题目条件。
代码实现:
public int numSpecial(int[][] mat) {
int n = mat.length;
int m = mat[0].length;
int[] row = new int[n];
int[] sort = new int[m];
for(int i = 0; i<n;i++){
for(int j =0 ; j<m; j++){
row[i] += mat[i][j];
sort[j] += mat[i][j];
}
}
int arr=0;
for(int i = 0; i<n;i++){
for(int j =0 ; j<m; j++){
if(mat[i][j]==1 && row[i]==1 && sort[j]==1){
arr++;
}
}
}
return arr;
}
标签:特殊,题目,mat,二进制,位置,矩阵,int
From: https://www.cnblogs.com/zjjtt/p/16656522.html