Maximal Square

来源:互联网 发布:数据采集系统101data 编辑:程序博客网 时间:2024/06/08 18:25

原题地址:点我传送

要找一个最大的全1正方形,假设它的右下方点的坐标为i,j。P(i,j)表示它做正方形右下角点时最大正方形的尺寸,则显然P(i,j)是它左,上,左上三个点P值的最小值 + 1。(也就是说要产生更大的正方形,则它的这三个点都必须有比这小1的正方形。)_但若此时该点为0,则P=0。最后最大的P就是解。

C++:

class Solution {public:    int maximalSquare(vector<vector<char>>& matrix)     {        int ans = 0;        int** sq = new int* [matrix.size()];        for(int i = 0;i< matrix.size() ; i++)        {            sq[i] = new int [matrix[0].size()];            for(int j = 0;j < matrix[0].size() ; j++)            {                sq[i][j] = (matrix[i][j]-'0');            }        }        for(int i = 0;i< matrix.size() ; i++)        {            for(int j = 0;j < matrix[0].size() ; j++)            {                int upleft = (i&&j) ? (sq[i-1][j-1]) : 0;                 int up = (i) ? (sq[i-1][j]) : 0;                 int left = (j) ? (sq[i][j-1]) : 0;                 sq[i][j] = (sq[i][j]) ? (min(up,min(upleft,left))+1) : 0 ;                ans = ans > sq[i][j] ? ans : sq[i][j] ;            }        }        return ans*ans;    }};


原创粉丝点击