Java实现 LeetCode 221.最大正方形(动态规划)

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

示例:

输入:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解:
状态转移方程:dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1

class Solution {
    public int maximalSquare(char[][] matrix) {
        int m = matrix.length;
        if(m == 0) return 0;  
        int n = matrix[0].length;
        
        int max_len = 0;
        int[][] dp = new int[m][n];
        //初始化
        for(int i = 0; i < m; i++) {
            if(matrix[i][0] == '1') {
                dp[i][0] = 1;
                max_len = 1;
            }
        }
        for(int j = 0; j < n; j++) {
            if(matrix[0][j] == '1') {
                dp[0][j] = 1;
                max_len = 1;
            }
        }

        //状态转移
        for(int i = 1; i < m; i++) {
            for(int j = 1; j < n; j++) {
                if(matrix[i][j] == '1') {
                    dp[i][j] = Math.min(Math.min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1;
                    max_len = Math.max(dp[i][j], max_len);
                }
            }
        }
        return max_len*max_len;

    }
}

你可能感兴趣的:(leetcode,Java,动态规划)