力扣 221 最大正方形 動態規劃

1、

// class Solution {
// public:
//     int maximalSquare(vector<vector<char>>& matrix) {
//         if (matrix.size() == 0 || matrix[0].size() == 0) {
//             return 0;}
//         int n=matrix.size();
//         int m=matrix[0].size();
//         int ans=0;
//         int maxSide=0;
//         vector<vector<int>> f(n,vector<int>(m));

//         for(int i=0;i<m;i++)
//         {
//             for(int j=0;j<m;j++)
//             {
//                 // if(i==0||j==0)
//                 // {
//                 //     f[i][j]=matrix[i][j];
//                 // }
//                 // else if(matrix[i][j]==0)
//                 // {
//                 //     f[i][j]=0;
//                 // }
//                 // else{
//                 //     f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;
//                 // }
//                 // ans=max(ans,f[i][j]);
//             }
//         }
//          int s=maxSide*maxSide;
//          return s;
//     }
// };
class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        if (matrix.size() == 0 || matrix[0].size() == 0) {
            return 0;
        }
        int maxSide = 0;
        int rows = matrix.size(), columns = matrix[0].size();
        vector<vector<int>> dp(rows, vector<int>(columns));
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                if (matrix[i][j] == '1') {//這裏如果寫matrix[i][j] 1的ASIC 49
                    if (i == 0 || j == 0) {
                        dp[i][j] = 1;
                    } else {
                        dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
                    }
                    maxSide = max(maxSide, dp[i][j]);
                }
            }
        }
        int maxSquare = maxSide * maxSide;
        return maxSquare;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章