221. 最大正方形


这是我动态规划,然后没有找到最优子结构,每次继承左上的flag,然后查看该位置上面和左方是否为‘1’,
比较字符,刚开始我 == 1直接爆炸,最后一个用例我就不想继续了,以后再说吧
最后破案了,flag赋值时使用==,没有使用=,炸裂。
查看代码
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int m = matrix.size() + 1;
int n = matrix[0].size() + 1;
int result = 0;
int j;
vector<vector<int>>flag(m, vector<int>(n, 0)); //比matrix的size大1,方便初始化,所以matrix[i][j]对应flag[i+1][j+1]
for (int i = 0; i < matrix.size(); i++) {
for ( j = 0; j < matrix[i].size(); j++) {
if (matrix[i][j] == '0') {
flag[i + 1][j + 1] = 0;
}
else {
int temp = flag[i][j];
if (temp == 0 ) {
flag[i + 1][j + 1] = 1;
if (result < 1) {
result = 1;
}
}
else {
int x = 1;
while (temp >= x) {
if (matrix[i - x][j] == '1' && matrix[i][j - x] == '1') {
x++;
}
else {
flag[i + 1][j + 1] == x;
break;
}
}
if (temp <= x) { //这个等于号看了半天,没有本地调试吃的亏
//cout<<x;
flag[i + 1][j + 1] = x;
if (x > result) {
result = x;
}
}
}
}
}
}
return result * result;
}
};
z

浙公网安备 33010602011771号