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

    本题大意:给出一个只包含0和1的2D的二维数组,求出只包含1的正方形的面积大小。例如:

    答案应为4。

    解题思路:dp算法。假定当前结点为matrix[x][y] ,则将以该点为右下角的正方形的边长记为:f[x][y]。显然,当matrix[x][y] == '0'时,f[x][y] = 0;如果f[x][y] == '1',找出dp的递推公式:f[x][y] = min(f[x-1][y], f[x][y-1], f[x-1][y-1]) + 1;

     1 class Solution {
     2 public:
     3     int maximalSquare(vector<vector<char>>& matrix) {
     4         if(matrix.empty() || matrix[0].empty() ) return 0;
     5         int m = matrix.size();
     6         int n = matrix[0].size();
     7         int f[m][n];
     8         int maxS = 0;
     9         for(int i = 0; i < m; i++)
    10         {
    11             if(matrix[i][0] == '1')
    12             {
    13                 f[i][0] = 1;
    14                 maxS = 1;
    15             }
    16             else f[i][0] = 0;
    17         }
    18         for(int j = 0; j < n; j++)
    19         {
    20             if(matrix[0][j] == '1')
    21             {
    22                 f[0][j] = 1;
    23                 maxS = 1;
    24             }
    25             else f[0][j] = 0;
    26         } #初始化第一行和第一列
    27         for(int i = 1; i < m; i++)
    28         {
    29             for(int j = 1; j < n; j++)
    30             {
    31                 if(matrix[i][j] == '0') f[i][j] = 0;
    32                 else
    33                 {
    34                     f[i][j] = min( f[i-1][j], min(f[i][j-1], f[i-1][j-1])) + 1;
    35                     maxS = max(maxS, f[i][j]);
    36                 }
    37             }
    38         }
    39         return maxS * maxS;
    40     }
    41 };
  • 相关阅读:
    Mac上安装Python3虚拟环境(VirtualEnv)教程
    django 安装验证码插件captcha
    OS path 的常见应用
    os 相对路径与绝对路径
    RecursionError: maximum recursion depth exceeded while calling a Python object
    java爬虫爬取博客园数据
    SVN
    Jwt验证
    Vuex
    SPA项目开发之CRUD+表单验证
  • 原文地址:https://www.cnblogs.com/jingyuewutong/p/5680093.html
Copyright © 2011-2022 走看看