![7847617d7ab090b1cf14c5f6c3a70f06.png](https://img-blog.csdnimg.cn/img_convert/7847617d7ab090b1cf14c5f6c3a70f06.png)
###题目
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
- ["1","0","1","0","0"]
- ["1","0","1","1","1"]
- ["1","1","1","1","1"]
- ["1","0","0","1","0"]
- 输出: 6
###思路
万物皆可动态规划,设置二维dp矩阵,其中dp[i][j]代表在第i行中包含第j个元素的最长的连续'1'的长度。例如[1,1,0,0,1,1,0,1],相应的dp矩阵的值为[1,2,0,0,1,2,0,1]。
下一步开始遍历整个矩阵,遍历每一个元素的同时更新dp,同时计算最大面积,最大面积的计算原理是这样的
- 假设dp[i][j]的值为5,只考虑第i行且带上matrix[i][j]时能组成的最大矩阵面积为5,高为1,底为
。
- 再考虑上i-1行且带上matrix[i-1][j],此情况下能组成的最大矩形的高为2,底为
- 再考虑上i-1行且带上matrix[i-2][j],此情况下能组成的最大矩形的高为3,底为
- 一直到第0行,此情况下的最大矩形的高为i+1,底为
通过上面的计算方式,考虑了所有的能够组成的矩形,那么matrix能够组成的最大矩形肯定会被计算一次,所以能够找出最大矩形面积,其实也算是暴力法,不过利用了dp数组保存下