LeetCode 1277. 统计全为 1 的正方形子矩阵(DP)
1. 题目
给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。
示例 1:
输入:matrix =
[[0,1,1,1],[1,1,1,1],[0,1,1,1]
]
输出:15
解释:
边长为 1 的正方形有 10 个。
边长为 2 的正方形有 4 个。
边长为 3 的正方形有 1 个。
正方形的总数 = 10 + 4 + 1 = 15.示例 2:
输入:matrix =
[[1,0,1],[1,1,0],[1,1,0]
]
输出:7
解释:
边长为 1 的正方形有 6 个。
边长为 2 的正方形有 1 个。
正方形的总数 = 6 + 1 = 7.提示:
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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
类似题目:
LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)
LeetCode 5655. 重新排列后的最大子矩阵(前缀和+排序)
dp[i][j]
表示 以(i,j)
为右下角的最大正方形边长- 第一行、第一列肯定最大是1(矩阵值为1的话)
- 其他为 1 位置的最大边长跟它相邻的几块的关系:等于左上方向3个最短的边长+1
- 正方形的个数等于最大的边长
class Solution {public:int countSquares(vector<vector<int>>& matrix) {int m = matrix.size(), n = matrix[0].size(), i, j, count = 0;vector<vector<int>> dp(m,vector<int>(n,0));//dp[i][j] 表示 以i,j为右下角的最大正方形边长for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){if(i==0 || j==0)dp[i][j] = matrix[i][j];//最多边长1else if(matrix[i][j]==1)dp[i][j] = 1+min(dp[i-1][j],min(dp[i][j-1],dp[i-1][j-1]));count += dp[i][j];}}return count;}
};
另评论区Gremist
优化了内存,原地算法
class Solution {public:int countSquares(vector<vector<int>>& matrix) {int ans = 0;for (int i = 0; i < matrix.size(); i++) {for (int j = 0; j < matrix[0].size(); j++) {if (i && j && matrix[i][j]) {matrix[i][j] += min({matrix[i-1][j-1], matrix[i-1][j], matrix[i][j-1]});}ans += matrix[i][j];}}return ans;}
};
LeetCode 1277. 统计全为 1 的正方形子矩阵(DP)相关推荐
- C语言求最大正方形子矩阵,动态规划—统计全为1的正方形子矩阵个数|最大正方形...
最大正方形 (统计全为 1 的正方形子矩阵) 解析可以参考leetcode解析 public class Solution { public int countSquares(int[][] matr ...
- leetcode算法题--统计全为 1 的正方形子矩阵
原题链接:https://leetcode-cn.com/problems/count-square-submatrices-with-all-ones/ 相关题目:最大正方形 动态规划O(m * n ...
- leetcode1277. 统计全为 1 的正方形子矩阵(dp)
给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数.示例 1:输入:matrix = [[0,1,1,1],[1,1,1,1],[ ...
- LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)
文章目录 1. 题目 2. 解题 1. 题目 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat , 请你返回有多少个 子矩形 的元素全部都是 1 . 示例 1: 输入:mat ...
- leetcode题库1277-- 统计全为 1 的正方形子矩阵
给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数. 示例 1: 输入:matrix = [[0,1,1,1],[1,1,1,1] ...
- LeetCode 1220. 统计元音字母序列的数目(DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...
- LeetCode 1641. 统计字典序元音字符串的数目(DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请返回长度为 n .仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量. 字符串 s 按 字典序排列 需要满足 ...
- 5454. 统计全 1 子矩形(Leetcode 196周赛)
5454. 统计全 1 子矩形 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 . 示例 1: 输入:mat = [[1,0 ...
- leetCode最短补全词
leetCode最短补全词 题目要求如下: 给你一个字符串 licensePlate 和一个字符串数组 words ,请你找出并返回 words 中的 最短补全词 . 补全词 是一个包含 licens ...
最新文章
- 阿里90后工程师利用ARM硬件特性开启安卓8终端“上帝模式”
- Android 8.0 运行时权限策略变化和适配方案
- AI时代的神马搜索!神马智能对话技术深度解读
- 如何写计算机会议的rebuttal
- 隐式类型转换中显式申明的非必要性
- 华强北二手手机卖不出去,闲鱼砸一亿现金帮扶
- C语言中定义整形可以连等吗,关于一道分解整数为N个连数整数的编程题
- MongoDB aop 日志
- 浅谈Netty相关概念
- 软件工程需求分析模板(简单)
- 很多的计算机英语词汇是通过,计算机英语词汇隐喻分析
- kali下java,kali java安装
- 快速部署支持 Makedown 和 LaTeX 等格式的 Zbox-Wiki 文档共享站点
- 或非门sr锁存器_sr锁存器的工作原理
- html help文档制作,HTML Help Workshop(文件制作工具)
- python 多态app_多态简介 | Python从入门到精通:高阶篇之三十三-阿里云开发者社区...
- 踩坑记--hexo中加入音乐
- 汉字转换成NCR编码的字符
- ParaView Visualizer 在ubuntu22.04环境下快速开发入门指南
- 人工智能不止会批改作业,它还在改变“一刀切”的教学模式
热门文章
- xcode8 快捷键失效
- java arraylist string_在Java ArrayList String中使用contains
- 精读linux源码,Linux基础入门的操作精读.doc
- 团队Alpha冲刺(三)
- Http协议之报文·方法·状态码
- [linux]服务器apache配置vhost
- 04_类与对象_课程动手动脑问题以及课后实验性问题及解答集锦
- show一下自己的文档编写功底
- C# 6.0语法新特性体验(二)
- 随想,对嵌入式职场建议