3128. 直角三角形

发布于 2024-08-02  18 次阅读


给你一个二维 boolean 矩阵 grid 。

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

注意:

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

示例 1:

010
011
010

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

输出:2

解释:

有 2 个直角三角形。

示例 2:

1000
0101
1000

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

输出:0

解释:

没有直角三角形。

示例 3:

101
100
100

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

输出:2

解释:

有两个直角三角形。

class Solution {
    public long numberOfRightTriangles(int[][] grid) {
        int n = grid[0].length;
        int[] colSum = new int[n];
        Arrays.fill(colSum, -1);
        for (int[] row : grid) {
            for (int i = 0; i < n; i++) {
                colSum[i] += row[i];
            }
        }

        long ans = 0;

        for (int[] row : grid) {
            int rowSum = -1;
            for (int x : row) {
                rowSum += x;
            }
            for (int i = 0; i < n; i++) {
                if(row[i] == 1){
                    ans += rowSum * colSum[i];
                }
            }
        }
        return ans;
    }
}