LeetCode. 3128. 直角三角形

88 阅读1分钟

题目

leetcode.cn/problems/ri… 给你一个二维 boolean 矩阵 grid 。

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

注意:

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

思路

定义两个数组分别记录行和列中 1 的个数, 遍历行数组,如果 1 的个数 > 1 , 则有条件组成三角形,再查找所在列的个数.所能组成直角三角形的个数为(行数-1)*(列数-1)

代码

class Solution {
    public long numberOfRightTriangles(int[][] grid) {
        long ans = 0;
        int row = grid.length;
        int col = grid[0].length;
        int[] colArr = new int[col];
        int[] rowArr = new int[row];
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                int x = grid[i][j];
                if (x == 1) {
                    colArr[j]++;
                    rowArr[i]++;
                }
            }
        }
        for (int i = 0; i < row; i++) {
            if (rowArr[i] <= 1) {
                continue;
            }
            for (int j = 0; j < col; j++) {
                if (grid[i][j] == 1 && colArr[j] > 1) {
                    ans += (long) (rowArr[i] - 1) * (colArr[j] - 1);
                }
            }
        }
        return ans;
    }
}

题解

leetcode.cn/problems/ri…