1277. 统计全为 1 的正方形子矩阵
Problem: 1277. 统计全为 1 的正方形子矩阵
文章目录
- 思路
- 解题过程
- 复杂度
- Code
思路
动态规划。
解题过程
dp[i]
表示为以该位置为右下角的正方形的个数,状态转移方程为某位置的左,左上和上方位置的dp表的数值的最小值 + 1。
复杂度
-
时间复杂度: O(m∗n)O(m*n)O(m∗n)
-
空间复杂度: O(m∗n)O(m*n)O(m∗n)
Code
class Solution {public:int countSquares(vector<vector<int>>& matrix) {int ret = 0, m = matrix.size(), n = matrix[0].size();vector<vector<int>> dp(m, vector<int>(n));for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)if (matrix[i][j] && i && j &&matrix[i][j - 1] && matrix[i - 1][j])dp[i][j] = min({dp[i - 1][j - 1],dp[i][j - 1],dp[i -1][j]}) + 1;else if (matrix[i][j])dp[i][j] = 1;for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)ret += dp[i][j];return ret;}};