【力扣】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));
    }
相关推荐
z200509301 小时前
每日简单算法题——————跟着卡尔
算法
budingxiaomoli2 小时前
Spring IoC &DI
java·spring·ioc·di
Spider Cat 蜘蛛猫2 小时前
Springboot SSO系统设计文档
java·spring boot·后端
未若君雅裁2 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql
学习中.........2 小时前
从扰动函数的变化,感受红黑树带来的性能提升
java
️是782 小时前
信息奥赛一本通—编程启蒙(3395:练68.3 车牌问题)
数据结构·c++·算法
Liangwei Lin3 小时前
LeetCode 118. 杨辉三角
算法·leetcode·职场和发展
计算机安禾3 小时前
【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit
java·c++·算法
鼠鼠我(‘-ωก̀ )好困3 小时前
leetGPU
算法
我星期八休息3 小时前
Linux系统编程—基础IO
linux·运维·服务器·c语言·c++·人工智能·算法