在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。
示例:
輸入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出: 4
方法一:暴力法
由於正方形的面積等於邊長的平方,因此要找到最大正方形的面積,首先需要找到最大正方形的邊長,然後計算最大邊長的平方即可。
暴力法是最簡單直觀的做法,具體做法如下:
- 遍歷矩陣中的每個元素,每次遇到 1,則將該元素作爲正方形的左上角;
- 確定正方形的左上角後,根據左上角所在的行和列計算可能的最大正方形的邊長(正方形的範圍不能超出矩陣的行數和列數),在該邊長範圍內尋找只包含 1 的最大正方形;
- 每次在下方新增一行以及在右方新增一列,判斷新增的行和列是否滿足所有元素都是 1。
C++
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if (matrix.empty() || matrix[0].empty()) return 0;
int row = matrix.size(),col = matrix[0].size();
int res = 0;
vector<vector<int>> dp(row,vector<int>(col,0));
for(int i=0;i<row;i++)