【力扣】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));
    }
相关推荐
leobertlan6 小时前
痛苦系列 | DSP-03 跨越单位圆:Z变换与零极点分析
算法·程序员
蛋蛋的就会顺顺的6 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8267 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
开发小能手1237 小时前
答案daanC语言
数据结构·算法
小 黄 鸡7 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
Navigator_Z8 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
伯恩bourne9 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_9 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
pride.li10 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
省钱兄--zs10 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构