zoukankan      html  css  js  c++  java
  • 1277. Count Square Submatrices with All Ones

    问题:

    给定由0,1构成的数组,求由1构成的(各种长度边长的)正方形的总个数有多少。

    Example 1:
    
    Input: matrix =
    [
      [0,1,1,1],
      [1,1,1,1],
      [0,1,1,1]
    ]
    Output: 15
    Explanation: 
    There are 10 squares of side 1.
    There are 4 squares of side 2.
    There is  1 square of side 3.
    Total number of squares = 10 + 4 + 1 = 15.
    
    Example 2:
    Input: matrix = 
    [
      [1,0,1],
      [1,1,0],
      [1,1,0]
    ]
    Output: 7
    Explanation: 
    There are 6 squares of side 1.  
    There is 1 square of side 2. 
    Total number of squares = 6 + 1 = 7.
     
    Constraints:
    1 <= arr.length <= 300
    1 <= arr[0].length <= 300
    0 <= arr[i][j] <= 1
    

      

    解法:

    动态规划DP

    dp[i][j]:代表,以matrix[i][j]为右下角的正方形的个数。

    动态转移方程:

    如果该节点matrix[i][j]==1:

    dp[i][j]=min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) +1

    如果该节点matrix[i][j]==0:

    dp[i][j]=0=matrix[i][j]

    代码参考:

     1 class Solution {
     2 public:
     3     int countSquares(vector<vector<int>>& matrix) {
     4         int m=matrix.size(), n=matrix[0].size();
     5         int res=0;
     6         for(int i=0; i<m; i++){
     7             for(int j=0; j<n; j++){
     8                 if(i>0 && j>0 && matrix[i][j]>0){
     9                     matrix[i][j] = min(matrix[i-1][j-1], min(matrix[i-1][j], matrix[i][j-1]))+1;
    10                 }
    11                 res+=matrix[i][j];
    12             }
    13         }
    14         return res;
    15     }
    16 };
  • 相关阅读:
    Mac基本操作记录
    flutter vscode+第三方安卓模拟器
    git一些基本操作
    获取点击元素的绝对位置
    windows下提交前检测操作
    VGG网络学习
    MySQL数据库中文乱码
    配深度学习环境中的小tips(tensorflow+anaconda+keras+cuda)
    Docker安装指定的anaconda
    yolov1阅读
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/13209950.html
Copyright © 2011-2022 走看看