#每日一练

题目:

给你一个二维 boolean 矩阵 grid 。

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

注意:

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

思路:

这道题可以选择用枚举的方式来做,先固定行的一点,计算该点所在列元素值为1的个数(col),再固定列的一点。计算该点所在行元素值为1的个数(row),因为需要将本身值减掉,所以实际列元素值为1的个数col - 1 ,实际行元素值1的个数 row - 1。根据乘法原理,将(col-1) *(row-1)为该题的解

代码:

class Solution:
    def numberOfRightTriangles(self, grid: List[List[int]]) -> int:
        n, m = len(grid), len(grid[0])
        col = [0] * m
        res = 0
        for j in range(m):
            for i in range(n):
                col[j] += grid[i][j]
        for i in range(n):
            row = sum(grid[i])
            for j in range(n):
                if grid[i][j] == 1:
                    res += (row-1) * (col[j] - 1)
        return res

心得:

注意索引过界!!!

原题链接:https://leetcode.cn/problems/right-triangles/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值