30-Day Leetcoding Challenge Day27

两种解法:

1.暴力解法,时间复杂度O((m*n)^2)

2.动态规划,dp[i][j]=min(dp[i1][j],dp[i1][j1],dp[i][j1])+1.

JAVA

lass Solution {
    public int maximalSquare(char[][] matrix) {
        int row = matrix.length;
        int col = row > 0 ? matrix[0].length : 0;
        int maxsqlen = 0;
        for(int i = 0; i < row; i++){
            for(int j = 0; j < col; j++){
                if(matrix[i][j] == '1'){
                    int sqlen = 1;
                    boolean flag = true;
                    while(sqlen + i < row && sqlen + j < col && flag){
                        for(int k = j; k <= sqlen + j; k++){
                            if(matrix[i+sqlen][k] == '0'){
                                flag = false;
                                break;
                            }
                        }
                        for(int k = i; k <= sqlen + i; k++){
                            if(matrix[k][j+sqlen] == '0'){
                                flag = false;
                                break;
                            }
                        }
                        if(flag) sqlen++;
                    }
                    if(maxsqlen < sqlen) maxsqlen = sqlen;
                }
            }
        }
        return maxsqlen*maxsqlen;
    }
}
class Solution {
    public int maximalSquare(char[][] matrix) {
        int row = matrix.length;
        int col = row > 0 ? matrix[0].length : 0;
        int[][] dp = new int[row+1][col+1];
        int maxsqlen = 0;
        for(int i = 1; i <= row; i++){
            for(int j = 1; j <= col; j++){
                if(matrix[i-1][j-1] == '1'){
                    dp[i][j] = Math.min(Math.min(dp[i][j-1], dp[i-1][j]),dp[i-1][j-1])+1;
                    maxsqlen = Math.max(maxsqlen, dp[i][j]);
                }
            }
        }
        return maxsqlen*maxsqlen;
    }
}

猜你喜欢

转载自www.cnblogs.com/yawenw/p/12822836.html
今日推荐