题源:Leetcode

链接:https://leetcode-cn.com/problems/maximal-square/

 

最大正方形_状态转移

 

 

 1 class Solution {
 2 public:
 3     int maximalSquare(vector<vector<char>>& matrix) {
 4         if (matrix.size() == 0 || matrix[0].size() == 0) {
 5             return 0;
 6         }
 7         int maxSide = 0;
 8         int rows = matrix.size(), columns = matrix[0].size();
 9         vector<vector<int>> dp(rows, vector<int>(columns));
10         for (int i = 0; i < rows; i++) {
11             for (int j = 0; j < columns; j++) {
12                 if (matrix[i][j] == '1') {
13                     if (i == 0 || j == 0) {
14                         dp[i][j] = 1;
15                     } else {
16                         dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
17                     }
18                     maxSide = max(maxSide, dp[i][j]);
19                 }
20             }
21         }
22         int maxSquare = maxSide * maxSide;
23         return maxSquare;
24     }
25 };

我有了思路但是没有实现出来,看了答案之后会了,答案的解法比较巧妙

答案的状态转移方程为:最大正方形_其他_02