Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.
For example, given the following matrix:
1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0
在给定的二维字符数组,找出最大全为1的矩形包含的1的个数:
注意这里相当于求面积而已,只要求出边长就很好办了。边长用dp很好求,这题其实跟前面有道dp问题很像,以后有时间找出来,先贴下代码:
1 class Solution { 2 public: 3 int maximalSquare(vector>& matrix) { 4 if(!matrix.size()||!matrix[0].size()) return 0; 5 vector >dp(matrix.size(), vector (matrix[0].size(), 0)); 6 int maxVal = 0; 7 for(int i = 0; i < matrix.size(); ++i){ 8 if(matrix[i][0] == '1'){ 9 dp[i][0] = 1;10 maxVal = 1;11 }else dp[i][0] = 0;12 }13 for(int j = 0; j < matrix[0].size(); ++j){14 if(matrix[0][j] == '1'){15 dp[0][j] = 1; 16 maxVal = 1;17 }else dp[0][j] = 0;18 }19 for(int i = 1; i < matrix.size(); ++i){20 for(int j = 1; j < matrix[0].size(); ++j){21 if(matrix[i][j] == '1'){22 dp[i][j] = min(dp[i-1][j], min(dp[i][j-1], dp[i-1][j-1])) + 1;23 maxVal = max(maxVal, dp[i][j]);24 }else25 dp[i][j] = 0;26 }27 }28 return maxVal*maxVal;29 }30 };