zoukankan      html  css  js  c++  java
  • leetcode 221 Maximal Square

    这题使用动态规划,基本想法是建立一张表table,table[i][j]就标志以点(i, j) 为右下角顶点的正方形最大边长,显然,可以通过table[i - 1][j - 1]来得到

    table[i][j]的值(正方形,只需要考虑对角的方向)。

    class Solution {
    public:
        int maximalSquare(vector<vector<char>>& matrix) {
                int M = matrix.size();
        if(M == 0)
            return 0;
        int N = matrix[0].size();
        if (N == 0)
            return 0;
        vector<vector<int>> table(M);
        for(int i = 0; i < M; i++)
            table[i].resize(N);
        int maxLen = 0;
        for(int j = 0; j < N; j++){
            if(matrix[0][j] == '0')
                table[0][j] = 0;
            else
                table[0][j]= 1;
            maxLen = max(table[0][j], maxLen);
        }
        for(int i = 0; i < M; i++){
            if(matrix[i][0] == '0'){
                table[i][0]= 0;
            }
            else{
                table[i][0]= 1;
            }
            maxLen = max(table[i][0], maxLen);
        }
        
        for(int i = 1; i < M; i++){
            for(int j = 1; j < N; j++){
                if(matrix[i][j] == '1') {
                    int w = 1;
                    int h = 1;
                    for (int k = 0; k < table[i - 1][j - 1]; k++) {
                        //for all k in line i
                        if(matrix[i][j - 1 - k] == '1')
                            w++;
                        else
                            break;
                    }
                    for (int k = 0; k < table[i - 1][j - 1]; k++) {
                        // for all k in col j
                        if(matrix[i - 1 - k][j] == '1')
                            h++;
                        else
                            break;
                    }
                    table[i][j] = min(w, h);
                }
                else{
                    table[i][j] = 0;
                }
                maxLen = max(table[i][j], maxLen);
            }
        }
        return maxLen * maxLen;
        }
    };
    

      

  • 相关阅读:
    360多渠道打包
    美团多渠道打包
    友盟的多渠道打包
    在代码中得到应用的签名
    如何为APK签名?
    driver.close()和driver.quit()
    块级元素和行内元素
    selenium切换窗口
    pycharm快捷键
    类属性与方法(待补充)
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4712503.html
Copyright © 2011-2022 走看看