【力扣】3128. 直角三角形 JAVA

一、题目描述

给你一个二维 boolean 矩阵 grid 。

请你返回使用 grid 中的 3 个元素可以构建的 直角三角形 数目,且满足 3 个元素值 都 为 1 。

注意:

如果 grid 中 3 个元素满足:一个元素与另一个元素在 同一行,同时与第三个元素在 同一列 ,那么这 3 个元素称为一个 直角三角形 。这 3 个元素互相之间不需要相邻。

  • 示例 1:

    0 1 0

    0 1 1

    0 1 0

    输入:grid = [[0,1,0],[0,1,1],[0,1,0]]

    输出:2

    解释:

    有 2 个直角三角形。

  • 示例 2:

    1 0 0 0

    0 1 0 1

    1 0 0 0

    输入:grid = [[1,0,0,0],[0,1,0,1],[1,0,0,0]]

    输出:0

    解释:

    没有直角三角形。

  • 示例 3:

    1 0 1

    1 0 0

    1 0 0

    输入:grid = [[1,0,1],[1,0,0],[1,0,0]]

    输出:2

    解释:

    有两个直角三角形。

二、解题思路

复制代码
/**
 *  解题思路:
 *  1、因为要找直角三角形,也就是说我们要找直角的顶点,也就是数组的交点为1
 *  2、先判断交点为1,然后找到交点为1所在的行的1的个数,然后再找到交点为1所在的列的1的个数
 *  3、解决第2步的问题,我们可以将二维数组的行和列抽取出来成为两个一维数组
 *  4、最后将每一行1的个数减去1 乘以 每一列1个数减1 最终得到结果(这个减去的1就是交点位置的1)
 */

三、示例代码

java 复制代码
public static long numberOfRightTriangles(int[][] grid) {
        //结果
        long sum = 0;
        //行数
        int m = grid.length;
        //列数
        int n = grid[0].length;
        //一维数组行
        int[] row = new int[m];
        //一维数组列
        int[] col = new int[n];
        for (int i = 0; i < m; i ++) {
            for (int j = 0; j < n; j ++) {
                //每行的j个数字相加,和为几,就代表每行有几个1
                row[i] += grid[i][j];
                //每列的i个数字相加,和为几,就代表每列有几个1
                col[j] += grid[i][j];
            }
        }
        for (int i = 0; i < m; i ++) {
            for (int j = 0; j < n; j ++) {
                //判断交点为1
                if (grid[i][j] == 1) {
                    //将每一行1的个数减去1 乘以 每一列1个数减1 最终得到结果
                    sum += (row[i] - 1) * (col[j] - 1);
                }
            }
        }
        return sum;
    }


    public static void main(String[] args) {
        int[][] grid = {{0,1,0},{0,1,1},{0,1,0}};
        System.out.println(numberOfRightTriangles(grid));
    }
相关推荐
蓝色汪洋10 分钟前
xtu oj矩阵
算法
超级大只老咪6 小时前
数组相邻元素比较的循环条件(Java竞赛考点)
java
hh随便起个名6 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
小浣熊熊熊熊熊熊熊丶6 小时前
《Effective Java》第25条:限制源文件为单个顶级类
java·开发语言·effective java
毕设源码-钟学长7 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
啃火龙果的兔子7 小时前
JDK 安装配置
java·开发语言
星哥说事7 小时前
应用程序监控:Java 与 Web 应用的实践
java·开发语言
派大鑫wink7 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
xUxIAOrUIII7 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home7 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法