类似于
var dp = new Array(m).fill().map(v => new Array(n).fill(0))建模if (arr[i][j] == '1') {值看arr中为1的项if (i == 0 || j == 0) {边界处理,自成正方形dp[i][j] = Math.min(...)最小值具有破坏性,所以需要按照最小值判断
var maximalSquare = function (arr) {
var res = 0;
if (arr == null || arr.length == 0 || arr[0].length == 0) return res;
var m = arr.length, n = arr[0].length;
var dp = new Array(m).fill().map(v => new Array(n).fill(0))
for (var i = 0; i < m; i++) {
for (var j = 0; j < n; j++) {
if (arr[i][j] == '1') {
if (i == 0 || j == 0) {
dp[i][j] = 1;
} else {
dp[i][j] = Math.min(
Math.min(
dp[i - 1][j], dp[i][j - 1]
),
dp[i - 1][j - 1]
) + 1;
}
res = Math.max(res, dp[i][j]);
}
}
}
var maxSquare = res * res;
return maxSquare;
};
console.log(maximalSquare([
["1", "0", "1", "0", "0"],
["1", "0", "1", "1", "1"],
["1", "1", "1", "1", "1"],
["1", "0", "0", "1", "0"]
]));