LeetCode #750 - Number Of Corner Rectangles

本文介绍了一种算法,用于在一个由0和1组成的网格中寻找角矩形的数量。角矩形是由四个不同位置的1构成的轴对齐矩形。文章通过枚举两行并计算这两行在同一列有多少个1的组合方式来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

Given a grid where each entry is only 0 or 1, find the number of corner rectangles.

A corner rectangle is 4 distinct 1s on the grid that form an axis-aligned rectangle. Note that only the corners need to have the value 1. Also, all four 1s used must be distinct.

Example 1:

Input: grid = 

[[1, 0, 0, 1, 0],

 [0, 0, 1, 0, 1],

 [0, 0, 0, 1, 0],

 [1, 0, 1, 0, 1]]

Output: 1

Explanation: There is only one corner rectangle, with corners grid[1][2], grid[1][4], grid[3][2], grid[3][4].

Example 2:

Input: grid = 

[[1, 1, 1],

 [1, 1, 1],

 [1, 1, 1]]

Output: 9

Explanation: There are four 2x2 rectangles, four 2x3 and 3x2 rectangles, and one 3x3 rectangle.

Example 3:

Input: grid = 

[[1, 1, 1, 1]]

Output: 0

Explanation: Rectangles must have four distinct corners.

Note:

1. The number of rows and columns of grid will each be in the range [1, 200].

2. Each grid[i][j] will be either 0 or 1.

3. The number of 1s in the grid will be at most 6000.

Corner rectangle的定义是四个顶点都为1即可,所以我们只需要计算一共有多少种顶点组合。 可以枚举两行,然后看这两行同一列有多少个1,进行组合。

class Solution {
public:
    int countCornerRectangles(vector<vector<int>>& grid) {
        if(grid.size()==0||grid[0].size()==0) return 0;
        int m=grid.size();
        int n=grid[0].size();
        int result=0;
        for(int i=0;i<m;i++)
        {
            for(int j=i+1;j<m;j++)
            {
                int count=0;
                for(int k=0;k<n;k++)
                    if(grid[i][k]==1&&grid[j][k]==1) count++;
                result+=count*(count-1)/2;
            }
        }
        return result;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值