动态规划 - 统计全为 1 的正方形子矩阵
javascript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
let matrix = [[1, 0, 1], [1, 1, 0], [1, 1, 0]];
console.log(matrix);
let m = matrix.length;
let n = matrix[0].length;
let max = matrix[0][0];
let res = 0;
//dp[i][j]是以ij元素作为右下角元素的最大正方形边长
let dp = new Array(m).fill(0).map(() => new Array(n).fill(0));
dp[0][0] = matrix[0][0];
res += dp[0][0];
for (let i = 1; i < m; i++) {
dp[i][0] = matrix[i][0];
res += dp[i][0];
}
for (let i = 1; i < n; i++) {
dp[0][i] = matrix[0][i];
res += dp[0][i];
}
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
if (matrix[i][j] === 0) {
continue;
}
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1;
res += dp[i][j];
}
}
console.log(dp);
console.log(res);typescript
let matrix =[[1,0,1],[1,1,0],[1,1,0]]
console.log(matrix)
let m = matrix.length
let n = matrix[0].length
let max = matrix[0][0]
let res=0
//dp[i][j]是以ij元素作为右下角元素的最大正方形边长
let dp = new Array(m).fill(0).map(() => new Array(n).fill(0))
dp[0][0] = matrix[0][0]
res+=dp[0][0]
for (let i = 1; i < m; i++) {
dp[i][0] = matrix[i][0]
res+=dp[i][0]
}
for (let i = 1; i < n; i++) {
dp[0][i] = matrix[0][i]
res+=dp[0][i]
}
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
if (matrix[i][j] === 0) {
continue
}
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
res+=dp[i][j]
}
}
console.log(dp)
console.log(res)