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

posted @ 2021-12-20 23:42  jozon  阅读(29)  评论(0)    收藏  举报