题目:
截图自官方
代码:
思路见注释
class Solution {
public int countSquares(int[][] matrix) {
int rowNumber=matrix.length;
int columnNumber=matrix[0].length;
int[][] res=new int[rowNumber][columnNumber];
int resNum=0;
// 看着图,我们以res[i][j]表示以i,j为右下点的正方形个数。
// 按行遍历原数组,有三种情况:
// 1.第一行第一列中的元素,以他们为右下点的正方形最多一个,取决于原数组对应元素的值。
// else if 2.如果原坐标中对应元素为0,将res[i][j]置为0,表示不存在以i,j为右下点的正方形
// else 3. 如果原坐标中对应元素为1,此时res[i][j]=另三个小正方形中最小的个数+1
for(int i=0;i<rowNumber;i++){
for(int j=0;j<columnNumber;j++){
if(i==0||j==0){
res[i][j]=matrix[i][j];
}else if(matrix[i][j]==0){
res[i][j]=0;
}else{
int temp1=Math.min(res[i][j-1],res[i-1][j-1]);
res[i][j]=Math.min(temp1,res[i-1][j])+1;
}
resNum+=res[i][j];
}
}
return resNum;
}
}