图解LeetCode——1582. 二进制矩阵中的特殊位置(难度:简单)

发布于:2022-12-30 ⋅ 阅读:(215) ⋅ 点赞:(0)

一、题目

给你一个大小为 rows * cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 。

特殊位置 定义:如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0(行和列的下标均 从 0 开始 ),则位置 (i, j) 被称为特殊位置。

二、示例

2.1> 示例 1:

【输入】mat = [
[1,0,0],
[0,0,1],
[1,0,0]]
【输出】1
【解释】(1,2) 是一个特殊位置,因为 mat[1][2] == 1 且所处的行和列上所有其他元素都是 0

2.2> 示例 2:

【输入】mat = [
[1,0,0],
[0,1,0],
[0,0,1]]
【输出】3 【解释】(0,0), (1,1) 和 (2,2) 都是特殊位置

2.3> 示例 3:

【输入】mat = [
[0,0,0,1],
[1,0,0,0],
[0,1,1,0],
[0,0,0,0]]
【输出】2

提示:

  • rows == mat.length
  • cols == mat[i].length
  • 1 <= rows, cols <= 100
  • mat[i][j] 是 0 或 1

三、解题思路

根据题目描述,我们首先需要对矩阵mat进行遍历,来判断哪个位置是“1”,这里,我们创建两个变量,分别是用来记录每行存在“1”的个数——int[] row和每列存在“1”的个数——int[] column;在这两个数组中,row[index]用来表示第index行有多少个“1”column[index]用来表示第index列有多少个“1”。确定好只存在1个“1”的行号和列号之后,我们通过判断mat[i][j]是否等于“1”,如果等于,则总数加1,统计完毕后,将最终结果返回即可。

下面我们以mat = [[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,1],[0,0,0,0,1,0,0,0],[1,0,0,0,1,0,0,0],[0,0,1,1,0,0,0,0]]为例,我们对mat矩阵进行遍历,最终确定row=[0,2]column=[0,5,7],然后,我们来判断row和column组成的这6个点是否等于1。最终结果是只有mat[0][5]==1,所以,返回结果为1。具体操作,请见下图所示:

四、代码实现

class Solution {
    public int numSpecial(int[][] mat) {
        int[] row = new int[mat.length], column = new int[mat[0].length];
        for (int i = 0; i < mat.length; i++) {
            for (int j = 0; j < mat[i].length; j++) {
                if (mat[i][j] == 1){
                    row[i] += 1;
                    column[j] +=1;
                }
            }            
        }
        int result = 0;
        for (int i = 0; i < row.length; i++) {
            if (row[i] != 1) continue;
            for(int j = 0; j < column.length; j++) {
                if (column[j] != 1) continue;
                if (mat[i][j] == 1) result++;
            }
        }
        return result;
    } 
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

本文含有隐藏内容,请 开通VIP 后查看