题目
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;
}
}