class Solution { public: /** 用另一个矩阵,记录以这个位置为右下角的最大正方形的边得数量,动态规划 */ int solve(vector<vector<char> >& matrix) { if(matrix.size() == 0){ return 0; } vector< vector<int> > dp( matrix.size()+1, vector<int>(matrix[0].size()+1, 0)); //因为有边界情况,左边和上边进行扩展一行,初始化边为0;不用再进行边界分类讨论; int maxlen=0; for(int i=1; i<dp.size(); i++){ for(int j=1; j<dp[0].size(); j++){ if(matrix[i-1][j-1]=='0'){ //dp数组和matrix的位置关系; dp[i][j]=0; }else{ dp[i][j] = min( dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1]) )+1; maxlen = max(maxlen, dp[i][j]); } } } return maxlen*maxlen; } };