Leetcode 最大正方形

java 实现

java 复制代码
class Solution {
    public int maximalSquare(char[][] matrix) {
        //处理特殊情况
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return 0;

        int rows = matrix.length;
        int cols = matrix[0].length;
        int[][] dp = new int[rows][cols]; //dp[i][j]的含义是以i,j为右下角的最大正方形边长
        int maxSide = 0; //maxSide是最大边长

        //遍历矩阵
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                if(matrix[i][j] == '1') {
                    if(i == 0 || j== 0) {
                        dp[i][j] = 1; //第一行或第一列元素所能组成的最大正方形边长只能是1
                    } else {
                        //以当前位置为右下角的最大正方形边长可以通过当前位置左方,上方,左上方这三个位置为右下角的
                        //最大正方形边长的最小值来确定
                        dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
                    }
                    // 更新最大边长
                    maxSide = Math.max(maxSide, dp[i][j]);
                }
            }
        }
        return maxSide * maxSide;
        
    }
}
相关推荐
sul.i7 分钟前
浅析·指针
算法
春日见9 分钟前
策略梯度算法
算法
Brilliantwxx10 分钟前
【算法从零到千】【1-7】 双指针算法
开发语言·c++·笔记·算法·leetcode·推荐算法
小许同学记录成长12 分钟前
孔洞修补算法
算法
随意起个昵称13 分钟前
线性dp-计数类题目9(斐波那契字符串)
算法·动态规划
菜菜的顾清寒19 分钟前
力扣HOT100(49)动态规划 -- 打家劫舍
算法·leetcode·动态规划
葡萄城技术团队22 分钟前
观察生活:人是如何分词的
算法·生活
装不满的克莱因瓶28 分钟前
什么是特征分解?从数学定义到现实问题的映射
人工智能·数学·算法·机器学习·ai·特征分解
killerbasd32 分钟前
总结 6.1
算法
「維他檸檬茶」36 分钟前
大模型算法学习2026.6.1
学习·算法·大模型·nlp