【題解】LeetCode 221. Maximal Square

【題目敘述】https://leetcode.com/problems/maximal-square/
【解題想法】

  • 題目要求元素全為 “1” 的最大正方形面積。
  • v[i][j]:存放以 (i, j) 為右下角座標看到的最大正方形邊長。
class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int n = matrix.size();
        if (n == 0) return 0;
        int m = matrix[0].size();
        if (m == 0) return 0;
        vector<vector<int>> v(n);
        for (int i = 0; i < n; i++){
            v[i].resize(m);
        }
        int ans = 0;
        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                v[i][j] = matrix[i][j]-'0';
                if (i == 0 || j == 0){
                    ans = max(ans, v[i][j]);
                    continue;
                }
                if (v[i][j] == 1) v[i][j] += min(v[i-1][j-1], min(v[i-1][j], v[i][j-1]));
                ans = max(ans, v[i][j]);
            }
        }
        return ans*ans;
    }
};
分享本文 Share with friends