LeetCode OJ:Maximal Square(最大矩形)
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 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
在给定的二维字符数组,找出最大全为1的矩形包含的1的个数:
注意这里相当于求面积而已,只要求出边长就很好办了。边长用dp很好求,这题其实跟前面有道dp问题很像,以后有时间找出来,先贴下代码:
1 class Solution { 2 public: 3 int maximalSquare(vector<vector<char>>& matrix) { 4 if(!matrix.size()||!matrix[0].size()) return 0; 5 vector<vector<int>>dp(matrix.size(), vector<int>(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 }else 25 dp[i][j] = 0; 26 } 27 } 28 return maxVal*maxVal; 29 } 30 };