leetcode 221. 最大正方形

题目如下

数据范围

典型的动态规划题。

令f(i,j)为以i,j为右下角左边正方形的最大边长,

当且仅当f(i,j) > 0(即 矩阵(ij)不为'0')时

f(i,j) = min(f(i,j - 1),f(i - 1,j - 1),f(i - 1,j))

对这个方程不太理解的话借用leetcode官方的图

也就是说边长为n的正方形可以由3个边长n-1的正方形以及边长1的正方形组成。

通过代码

cpp 复制代码
class Solution {
public:
   int maximalSquare(vector<vector<char>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();
        int max1 = 0;
        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] == '1'){dp[i][j] = 1;max1 = 1;}
                else dp[i][j] = 0;
            }
        }
    for(int i = 1;i < m;i++) {
        for(int j = 1;j < n;j++) {
            if(dp[i][j] == 1) dp[i][j] = min(min(dp[i - 1][j - 1],dp[i - 1][j]),dp[i][j - 1]) + 1;
           
            max1 = max(max1,dp[i][j]);
        }
        
    }
  
    return max1 * max1;
}
};
相关推荐
uoKent3 分钟前
c++中的运算符重载
开发语言·c++
量子炒饭大师4 分钟前
【C++入门】面向对象编程的基石——【类与对象】基础概念篇
java·c++·dubbo·类与对象·空指针规则
MSTcheng.5 分钟前
【C++】链地址法实现哈希桶!
c++·redis·哈希算法
重生之后端学习5 分钟前
25. K 个一组翻转链表
java·数据结构·算法·leetcode·职场和发展
你撅嘴真丑9 分钟前
第五章 C++与STL入门
开发语言·c++
坐在地上想成仙9 分钟前
从机床到键盘:用机械设计思维写出一个可部署网页
java·c++·python
CoderCodingNo13 分钟前
【GESP】C++五级练习题 luogu-P2242 公路维修问题
开发语言·c++·算法
不知名XL20 分钟前
day30 动态规划03
算法·动态规划
张祥64228890420 分钟前
线性代数本质笔记十二
人工智能·算法·机器学习
程序员-King.21 分钟前
day157—回溯—括号生成(LeetCode-22)
算法·leetcode·回溯