題目: LeetCode - 221. Maximal Square
題目說明
給一個二維陣列,裡面包含 0 和 1,求出其中值為 1 的元素能組出的最大正方形。
解題思路
對於陣列中的每個元素來說,若該值為 1,能組出的最大正方形的長度為,左邊那個元素能組出的最大正方形的長度、上面那個元素能組出的最大正方形的長度 和 左上角那個元素能組出的最大正方形的長度,三者的最小值 + 1,依照此想法使用動態規劃即可。
參考解法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | class Solution {public:
 int maximalSquare(vector<vector<char>>& matrix) {
 int height = matrix.size();
 if(!height)
 return 0;
 int width = matrix[0].size(), Max = 0;
 auto dp = vector<vector<int>>(height + 1, vector<int>(width + 1, 0));
 for(int i = 1; i <= height; ++i)
 for(int j = 1; j <= width; ++j)
 if(matrix[i - 1][j - 1] == '1')
 dp[i][j] = min(dp[i - 1][j], min(dp[i][j - 1], dp[i - 1][j - 1])) + 1,    Max = max(Max, dp[i][j]);
 return Max * Max;
 }
 };
 
 |