LeetCode:DP专题详解
221 medium
?
?
?
To appy DP,we define the state as the maximal?size?(square = size * size) of the square that can be formed till point? ? For the topmost row ( ? When? ? class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { if (matrix.empty()) { return 0; } int m = matrix.size(),n = matrix[0].size(),sz = 0; vector<vector<int>> dp(m,vector<int>(n,0)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (!i || !j || matrix[i][j] == ‘0‘) { dp[i][j] = matrix[i][j] - ‘0‘; } else { dp[i][j] = min(dp[i - 1][j - 1],min(dp[i - 1][j],dp[i][j - 1])) + 1; } sz = max(dp[i][j],sz); } } return sz * sz; } }; ? ? In the above code,it uses? ? class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { if (matrix.empty()) { return 0; } int m = matrix.size(),sz = 0; vector<int> pre(n,0),cur(n,0); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (!i || !j || matrix[i][j] == ‘0‘) { cur[j] = matrix[i][j] - ‘0‘; } else { cur[j] = min(pre[j - 1],min(pre[j],cur[j - 1])) + 1; } sz = max(cur[j],sz); } fill(pre.begin(),pre.end(),0); swap(pre,cur); } return sz * sz; } }; ? ? Furthermore,we may only use just one? ? class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { if (matrix.empty()) { return 0; } int m = matrix.size(),sz = 0,pre; vector<int> cur(n,0); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { int temp = cur[j]; if (!i || !j || matrix[i][j] == ‘0‘) { cur[j] = matrix[i][j] - ‘0‘; } else { cur[j] = min(pre,min(cur[j],sz); pre = temp; } } return sz * sz; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |