【力扣】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));
    }
相关推荐
qq_4850152120 分钟前
MyBatis-Plus 3.x FieldStrategy 作用
java·数据库·mybatis
lhldsg23 分钟前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
BSD_HY24 分钟前
薄膜开关矩阵扫描电路设计中的防鬼键措施
人工智能·算法·矩阵·人机交互·薄膜开关·源头工厂·深圳工厂
linux-hzh24 分钟前
百日算法修炼 · Day 17
数据结构·算法
XUEYUAN521226 分钟前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
光电的一只菜鸡28 分钟前
高通tuning中eis需要调什么
java·开发语言·前端
sel_930 分钟前
【多轮对话论文导读(七)】多轮对话论文阅读笔记:从数据生成、用户模拟到上下文重构与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·语言模型·自然语言处理
远游客071331 分钟前
为什么用「年×100+月」做比较
算法·gin
API快乐传递者1 小时前
1688 跨境电商 API 接口实战指南:从寻源到代采的全链路技术方案
java·前端·数据库
孔明click331 小时前
不想写代码,但想要集成一个登录页面?Sa-Token-Quick-Login 帮你实现!
java·sa-token·开源·springboot·登录·权限·权限认证