【leetcode第 165 場周賽】統計全為 1 的正方形子矩陣

  • 2019 年 12 月 3 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/shiliang97/article/details/103334424

5277. Count Square Submatrices with All Ones

Given a m * n matrix of ones and zeros, return how many square submatrices have all ones.

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

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/count-square-submatrices-with-all-ones 著作權歸領扣網路所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

暴力破解

選好一個起點,每個數都會當一次起點

然後從起點開始,一圈一圈往外擴展,擴展一圈就+1

直到遇到0,就結束擴展,更換下一個起點,遍歷所有起點需要 N*M,然後每個起點最多查詢N*M的資訊,所以複雜度就是 N*M*N*M

class Solution {  public:      int countSquares(vector<vector<int>>& matrix) {          int count=0;          int x = matrix.size();          int y = matrix[0].size();            for(int a=0;a<x;a++){              for(int b=0;b<y;b++){                  int flag=1;                  for(int t=0;b+t<y&&a+t<x;t++){                      for(int l=0;l<=t;l++){                          flag=flag&matrix[a+t][b+l]&&matrix[a+l][b+t];                      }                      flag=flag&matrix[a+t][b+t];                      if(flag){                          //cout<<a<<b<<t<<endl;                          count++;                      }else{                          break;                      }                  }              }          }          return count;      }  };