二进制矩阵中的特殊位置

二进制矩阵中的特殊位置

一、题目描述

给一个矩阵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;
    }
posted @ 2022-09-04 23:26  z_coding  阅读(54)  评论(0)    收藏  举报