Problem:
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
Return 4.
比较详细的解法在这里:
https://leetcode.com/discuss/38489/easy-solution-with-detailed-explanations-8ms-time-and-space
附上最终的代码:
1 int maximalSquare(vector<vector<char>>& matrix) 2 { 3 if (matrix.empty()) return 0; 4 int m = matrix.size(), n = matrix[0].size(); 5 vector<int> dp(m + 1, 0); 6 int maxsize = 0, pre = 0; 7 for (int j = 0; j < n; j++) { 8 for (int i = 1; i <= m; i++) { 9 int temp = dp[i]; 10 if (matrix[i - 1][j] == '1') { 11 dp[i] = min(dp[i], min(dp[i - 1], pre)) + 1; 12 maxsize = max(maxsize, dp[i]); 13 } 14 else dp[i] = 0; 15 pre = temp; 16 } 17 } 18 return maxsize * maxsize; 19 }