classSolution{public:intminPathSum(vector<vector<int>>& grid){int m = grid.size();int n = grid[0].size();for(int i = m -1; i >=0; i--){for(int j = n -1; j >=0; j--){if(i == m -1&& j == n -1)continue;if(i == m -1) grid[i][j]+= grid[i][j +1];elseif(j == n -1) grid[i][j]+= grid[i +1][j];else grid[i][j]+=min(grid[i][j +1], grid[i +1][j]);}}return grid[0][0];}};
221. 最大正方形(113)
代码实现(首刷自解)
classSolution{public:intmaximalSquare(vector<vector<char>>& matrix){int m = matrix.size();int n = matrix[0].size();int maxLevel =0;
vector<vector<int>>dp(m,vector<int>(n,0));int curLevel;for(int i = m -1; i >=0; i--){for(int j = n -1; j >=0; j--){if(matrix[i][j]=='0')continue;
dp[i][j]=1;if(i == m -1|| j == n -1){
maxLevel =max(maxLevel,1);continue;}
curLevel =min(dp[i][j +1], dp[i +1][j]);if(matrix[i][j]=='1'&& matrix[i + curLevel][j + curLevel]=='1'){
dp[i][j]= curLevel +1;}else dp[i][j]= curLevel;
maxLevel =max(dp[i][j], maxLevel);}}return maxLevel * maxLevel;}};