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;
        }
    };
    
  • 相关阅读:
    百度竞价与百度优化的区别
    apache +php
    复制别人的内容会被百度惩罚吗?
    百度优化也该有职业道德
    几个 PHP 的“魔术常量”
    用php生成静态html页面
    很早以前就说要学习.net了至今还未学!唉.........
    女人的十个经典故事
    我的网站为什么百度收录的越来越少
    Dbf文件操作
  • 原文地址:https://www.cnblogs.com/pk28/p/8051920.html
Copyright © 2011-2022 走看看