每日一题 -- 树
814. 二叉树剪枝
814. 二叉树剪枝
var pruneTree = function (root) {
if (!root) return null
root.left = pruneTree(root.left)
root.right = pruneTree(root.right)
if (root.val || root.left || root.right) return root
return null
}
91算法 -- 搜索
695.岛屿的最大面积
695.岛屿的最大面积
分析
- 这题是看题解理解之后做的
- 每一个 dfs 取他们四周的的值,其实这里的 dfs 更像是 dp 状态,他们的状态由申身边的 4 个 dp 构成维护
- 由于其他 dp 可能已经取了某个岛屿的值,所以为了保证不重复,所以走过的岛屿要设置为0,这样任意一个值都可以由它四个方式的 dp 状态了表示了
边界
- 边缘地方没有4个方向,所以需要给他们设置一层虚拟的海域 -- 超出部分都是 0
- 如果是海域位置,不需要我们需要考虑的,直接跳过即可
var maxAreaOfIsland = function (grid) {
let max =0
const row = grid.length
const column = grid[0].length
const dfs = (i, j) => {
if (i >= row || i < 0 || j >= column || j < 0) {
return 0
}
if (!grid[i][j]) return 0
grid[i][j] = 0
return 1 + dfs(i - 1, j) + dfs(i + 1, j) + dfs(i, j - 1) + dfs(i, j + 1)
}
for (let i = 0; i < row; i++) {
for (let j = 0; j < column; j++) {
max = Math.max(dfs(i, j),max)
}
}
return max
};