zoukankan      html  css  js  c++  java
  • leetcode 750. Number Of Corner Rectangles

    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:
    The number of rows and columns of grid will each be in the range [1, 200].
    Each grid[i][j] will be either 0 or 1.
    The number of 1s in the grid will be at most 6000.
    Discuss
    
    

    暴力枚举+轻微减枝

    class Solution {
    public:
        int search(vector<vector<int>>& grid, int x, int y) {
            int n = grid.size();
            int m = grid[0].size();
            int cnt = 0;
            for (int i = 1; i < n - x; ++i) {
                if(grid[x+i][y] == 0) continue;
                for (int j = 1; j < m - y; ++j) {
                    int x1, y1;
                    
                    x1 = x;
                    y1 = y + j;
                    if (grid[x1][y1] == 0) continue;
                    
                    x1 = x + i;
                    y1 = y + j;
                    if (grid[x1][y1] == 0) continue;
    
                    x1 = x + i;
                    y1 = y;
                    if (grid[x1][y1] == 0) continue;
                    cnt++;
                }
            }
            return cnt;
        }
        int countCornerRectangles(vector<vector<int>>& grid) {
            int n = grid.size();
            int m = grid[0].size();
            if (n == 1) return 0;
            int ans = 0;
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < m; ++j) {
                    if (grid[i][j] == 1) {
                        ans += search(grid, i, j);
                    }
                }
            }
            return ans;
        }
    };
    
  • 相关阅读:
    mac redis 安装及基本设置 python操作redis
    mac webstorm自动编译typescript配置
    MySQL数据库的基本操作
    python 面试基础考试题收集
    pyhon 列表的增删改查
    python 文件读取方法详解
    MAC下绕开百度网盘限速下载的方法,三步操作永久生效
    浏览器窗口输入网址后发生的一段事情(http完整请求)
    CMDB
    django适当进阶篇
  • 原文地址:https://www.cnblogs.com/pk28/p/8051920.html
Copyright © 2011-2022 走看看