厦门启明星网站建设,广州公司建设网站,镇江哪里做网站,北京大兴网站建设一、题目描述
给你一个二维 boolean 矩阵 grid 。 请你返回使用 grid 中的 3 个元素可以构建的 直角三角形 数目#xff0c;且满足 3 个元素值 都 为 1 。 注意#xff1a; 如果 grid 中 3 个元素满足#xff1a;一个元素与另一个元素在 同一行#xff0c;同时与第三个元素…一、题目描述
给你一个二维 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*/三、示例代码
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个数字相加和为几就代表每行有几个1row[i] grid[i][j];//每列的i个数字相加和为几就代表每列有几个1col[j] grid[i][j];}}for (int i 0; i m; i ) {for (int j 0; j n; j ) {//判断交点为1if (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));}