Maximal Square

来源:互联网 发布:广东省网络医院在哪里 编辑:程序博客网 时间:2024/06/05 11:58

dp[i][j]表示以点(i, j)为右下角的正方形的边长;状态转移方程:

dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;

class Solution {public:int maximalSquare(vector<vector<char>>& matrix) {if (matrix.size() == 0) return 0;int n = matrix.size(), m = matrix[0].size();int max_s = 0;vector<vector<int>> dp(n,vector<int>(m,0));// 第一列赋值for (int i = 0; i < m; i++) {dp[0][i] = matrix[0][i] - '0';max_s = max(max_s, dp[0][i]);//如果出现第一列里有1,其他列全是0的情况,那么max_s就是1}// 第一行赋值for (int i = 0; i < n; i++) {dp[i][0] = matrix[i][0] - '0';max_s = max(max_s, dp[i][0]);//如果出现第一行里有1,其他列全是0的情况,那么max_s就是1}// 递推for (int i = 1; i < m; i++) {for (int j = 1; j <n; j++) {dp[j][i] = matrix[j][i] == '1' ? min(dp[j - 1][i - 1], min(dp[j - 1][i], dp[j][i - 1])) + 1 : 0;max_s = max(max_s, dp[j][i]);}}return max_s * max_s;}};


0 0