题目链接
解题思路
创建两个数组分别存储行和列的和 对于每一个为1
的位置,如果行列和均为1,表明这个位置为特殊位置
AC代码
class Solution {
public int numSpecial ( int [ ] [ ] mat) {
int ans = 0 ;
int n = mat. length;
int m = mat[ 0 ] . length;
int [ ] sum_row = new int [ n] ;
int [ ] sum_col = new int [ m] ;
for ( int i = 0 ; i < n; i++ ) {
for ( int j = 0 ; j < m; j++ ) {
sum_row[ i] += mat[ i] [ j] ;
sum_col[ j] += mat[ i] [ j] ;
}
}
for ( int i = 0 ; i < n; i++ ) {
for ( int j = 0 ; j < m; j++ ) {
if ( mat[ i] [ j] == 1 && sum_col[ j] == 1 && sum_row[ i] == 1 ) {
ans++ ;
break ;
}
}
}
return ans;
}
}
本地测试代码
package com. company;
public class Solution_1582 {
public static int numSpecial ( int [ ] [ ] mat) {
int ans = 0 ;
int n = mat. length;
int m = mat[ 0 ] . length;
int [ ] sum_row = new int [ n] ;
int [ ] sum_col = new int [ m] ;
for ( int i = 0 ; i < n; i++ ) {
for ( int j = 0 ; j < m; j++ ) {
sum_row[ i] += mat[ i] [ j] ;
sum_col[ j] += mat[ i] [ j] ;
}
}
for ( int i = 0 ; i < n; i++ ) {
for ( int j = 0 ; j < m; j++ ) {
if ( mat[ i] [ j] == 1 && sum_col[ j] == 1 && sum_row[ i] == 1 ) {
ans++ ;
break ;
}
}
}
return ans;
}
public static void main ( String[ ] args) {
System. out. println ( numSpecial ( new int [ ] [ ] { { 1 , 0 , 0 } , { 0 , 0 , 1 } , { 1 , 0 , 0 } } ) ) ;
}
}