0
点赞
收藏
分享

微信扫一扫

LeetCode.3128.直角三角形

zhongjh 2024-08-04 阅读 9
算法python

题目描述:

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

注意:

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

输入输出实例:

思路:其实对于这道题目,将问题转化一下,我们只需要遍历每行每列,找当前这个‘1’能组成多少个‘直角三角形’就可以了,而当前这个‘1’能构成的‘直角三角形’的数量就等于他所在的这一行的‘1’的数量减一(减去他自己)乘他所在的这一列的‘1’的数量减一,比如实例一的第二行第二列的‘1’由他为拐角的直角三角形的数量为2*1个,所以,我们先找到每行每列有多少个1,定义起始数量count=0然后遍历矩阵,将当前‘1’为拐角的直角三角形数量累加即可。根据上述思路,代码如下:
 

class Solution:
    def numberOfRightTriangles(self, grid: List[List[int]]) -> int:
        row_count = [0] * len(grid)
        col_count = [0] * len(grid[0])
        #找每行每列有多少个1
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == 1 :
                    row_count[i] += 1
                    col_count[j] += 1
        count = 0

        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == 1 :
                    #针对这一个元素,可以构成的直角三角形数量等于这一行1的个数乘这一列1的个数(除了自己)
                    count += (row_count[i] - 1) * (col_count[j] - 1)
        return count

 

举报

相关推荐

0 条评论