leetcode[221]最大正方形

亡梦爱人 提交于 2020-02-13 20:55:00

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

示例:

输入: 

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

输出: 4

 

源码:

/**
 * dp表示最大正方形边长,dp[i][j] = MIN(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]);
 */
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))

int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){
    int i, j, max;
    int** dp = (int**)malloc(sizeof(int*) * matrixSize);
    for(i = 0; i < matrixSize; i++){
        dp[i] = (int*)malloc(sizeof(int) * matrixColSize[0]);
    }
	
    max = 0;
    for(i = 0; i < matrixSize; i++){
        for(j = 0; j < matrixColSize[0]; j++){
	    if(matrix[i][j] == '1'){
                dp[i][j] = MIN(i > 0 && j > 0 ? dp[i-1][j-1] : 0, MIN(j > 0 ? dp[i][j-1] : 0, i > 0 ? dp[i-1][j] : 0)) + 1;
                max = MAX(max, dp[i][j]);
	    }else{
	        dp[i][j] = 0;
	    }
        }
    }
	
    return max * max;
}

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!