如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的
题号:437
//前缀和
var pathSum = function (root, sum) {
//记录路径上的前缀和
//初始pathSum为0的情况,当路径和刚好为sum的情况
let map = new Map([[0,1]])
let pathSum = 0,result = 0
let pathSumSearch = (node) => {
if (node == null) {
return
}
pathSum += node.val
if (map.has(pathSum-sum)) {
result += map.get(pathSum-sum)
}
if (map.has(pathSum)) {
let count = map.get(pathSum)
count++
map.set(pathSum,count)
} else {
map.set(pathSum,1)
}
pathSumSearch(node.left)
pathSumSearch(node.right)
//回滚状态
let count = map.get(pathSum)
count--
if (count == 0) {
map.delete(pathSum)
} else {
map.set(pathSum,count)
}
pathSum -= node.val
}
pathSumSearch(root)
return result
};
题号:200
//岛屿问题
var numIslands = function (grid) {
//验证是否数组越界
let isValid = (i, j) => {
//边界不符合
if (i < 0 || i >= grid.length) {
return false
}
if (j < 0 || j>= grid[0].length) {
return false
}
//判断已经访问过的
return grid[i][j] == 1
}
//深度优先搜索
let dfs = (i, j) => {
if (isValid(i, j)) {
//标记访问过
grid[i][j] = -1
dfs(i-1, j)
dfs(i,j+1)
dfs(i + 1, j)
dfs(i,j-1)
}
}
let result = 0
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[0].length; j++) {
if (grid[i][j] == 1) {
//开始搜索
result++
dfs(i,j)
}
}
}
return result
};
题号:463
//岛屿问题
var islandPerimeter = function (grid) {
let isValid = (i,j) => {
if (i<0 || i>=grid.length) {
return false
}
if (j<0 || j>=grid[0].length) {
return false
}
return true
}
let result = 0
let dfs = (i, j) => {
if (isValid(i,j) && grid[i][j] == 1) {
//处理当前节点
grid[i][j] = -1
if (!isValid(i-1,j)) {
//上是边界
result++
}else if (grid[i-1][j] == 0) {
//上边界是水
result++
}
if (!isValid(i,j+1)) {
//右是边界
result++
}else if (grid[i][j+1] == 0) {
//右边是水
result++
}
if (!isValid(i+1,j)) {
//下是边界
result++
}else if (grid[i+1][j] == 0) {
//下边是水
result++
}
if (!isValid(i,j-1)) {
//左是边界
result++
}else if (grid[i][j-1] == 0) {
//左边是水
result++
}
dfs(i-1, j)
dfs(i,j+1)
dfs(i + 1, j)
dfs(i,j-1)
}
}
for (let i = 0; i < grid.length; i++) {
for (let j = 0; j < grid[0].length; j++) {
if (grid[i][j] == 1) {
dfs(i,j)
}
}
}
return result
};