题目描述:
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
[“1”,“1”,“1”,“1”,“1”],
[“1”,“0”,“0”,“1”,“0”]
]
输出: 6
方法1:动态规划
主要思路:
(1)使用heights[ i ][ j ]表示当前位置中,字符 ‘1’ 可以形成的高度,若matrix[ i-1][j-1] 处的字符为 ‘0’ ,则高度为 0 直接跳过,若为字符 ‘1’,则需要增加高度,既 heights[i][j]=heights[i-1][j]+1;
(2)在增加了高度后,可以更新在增加了该字符后,能不能在之前的面积的后面的一列上,增加新的面积,则使用 dp[i ][ j ] [ k ] 表示 i,j处各个高度下可能形成的面积,既 dp [ i][j][k] = dp[i][j-1][k]+k;
(3)使用中间变量保存可能的最大面积,既 res=max(res,dp[i][j][k]);
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
if(matrix.empty()||matrix[0