您的位置:首页 > 其它

leetcode-Maximal Square

2015-12-12 10:41 260 查看


这里本来要申请一个动态的二维数组的 可是没有想出怎么申请一个动态的二维数组 就申请了一个一伟数组当二维数组用了

dp[i][j] 代表以i j为右下角的最大面积的正方形的边长

if(matrix[i][j]==’1’)dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1

else dp[i][j]=0;

下面是提交的代码

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
/*
dp[i*ml+j] 代表以i,j为右下角的正方形的最大边长
*/
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int temp;
xlength = matrix.size();
if (xlength != 0)
{
ylength = matrix[0].size();
dp = new int[xlength*ylength];
for (int i = 0; i < xlength; i++)
{
if (matrix[i][0] == '1')
valueIs(i, 0, 1);
else
valueIs(i, 0, 0);
}
for (int i = 0; i < ylength; i++)
{
if (matrix[0][i] == '1')
valueIs(0, i, 1);
else
valueIs(0, i, 0);
}
for (int i = 1; i < xlength; i++)
for (int j = 1; j < ylength; j++)
{
if (matrix[i][j] == '1')
temp = minOfThree(valueAt(i - 1, j - 1), valueAt(i - 1, j), valueAt(i, j - 1)) + 1;
else
temp = 0;
valueIs(i, j, temp);
}
}
int max = 0;
for (int i = 0; i < xlength; i++)
for (int j = 0; j < ylength; j++)
{
if (max < valueAt(i, j))
max = valueAt(i, j);
}
temp = max*max;
return temp;
}
~Solution()
{
delete[]dp;
}
private:
int minOfTwo(int x, int y)
{
return min(x, y);
}
int minOfThree(int x, int y, int w)
{
int temp = min(x, y);
return min(temp, w);
}
void valueIs(int i, int j,int value)
{
dp[i*ylength + j] = value;
}
int valueAt(int i, int j)
{
if (i <= xlength-1 && j <= ylength-1)
return dp[i*ylength + j];
else
return -1;
}
int *dp;
int xlength;
int ylength;
};


下面是自己测试的代码

int main()

{

int xlength, ylength;

int temp;

vector
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: