30 天刷题挑战(十三)

题目来源: LeetCode 75 30 天 JavaScript 挑战

2631. 分组

思路

代码

ts 复制代码
Array.prototype.groupBy = function(fn) {
  const obj = {}

  for (let i = 0; i < this.length; i++) {
    const key = fn(this[i])
    if (!obj.hasOwnProperty(key)) {
      obj[key] = []
    }
    obj[key].push(this[i])
  }

  return obj
}

2724. 排序方式

思路

代码

ts 复制代码
function sortBy(arr: JSONValue[], fn: Fn): JSONValue[] {
  return arr.sort((a, b) => fn(a) - fn(b))
};

872. 叶子相似的树

思路

深度优先搜索找出每一个子节点,最后使用 toString 对比两个数组

代码

ts 复制代码
function leafSimilar(root1: TreeNode | null, root2: TreeNode | null): boolean {
  const root1Arr = []
  const root2Arr = []

   if (root1) {
     dfs(root1, root1Arr)
   }

   if (root2) {
     dfs(root2, root2Arr)
   }
  
   return root1Arr.toString() === root2Arr.toString()
};

function dfs(root, arr) {
  if (!root.left && !root.right) {
    arr.push(root.val)
  } else {
    if (root.left) {
      dfs(root.left, arr)
    }
    if (root.right) {
      dfs(root.right, arr)
    }
  }
}

1448. 统计二叉树中好节点的数目

思路

如果节点为空返回 0,递归分别获取左右子树的好节点 left, right,最后判断 max 是否大于根节点的值。

代码

ts 复制代码
function goodNodes(root: TreeNode | null, max = -Infinity): number {
  if (root === null) {
    return 0
  }
  
  const left = goodNodes(root.left, Math.max(max, root.val))
  const right = goodNodes(root.right, Math.max(max, root.val))
  
  return left + right + (max <= root.val ? 1 : 0)
};

437. 路径总和 III

思路

双重递归访问每一个节点,如果节点值等于 targetSum 说明符合要求结果加一。每到下一层 targetSum 减等于节点值。

代码

js 复制代码
const pathSum = function(root, targetSum) {
    if (root == null) {
      return 0;
    }
    
    let count = rootSum(root, targetSum);
    count += pathSum(root.left, targetSum);
    count += pathSum(root.right, targetSum);

    return count;
};

const rootSum = (root, targetSum) => {
    let ret = 0;

    if (root == null) {
      return 0;
    }

    const val = root.val;

    if (val === targetSum) {
        ret++;
    } 

    ret += rootSum(root.left, targetSum - val);
    ret += rootSum(root.right, targetSum - val);

    return ret;
}

本文完,感谢阅读🌹

相关推荐
奇怪的知识又增长了6 分钟前
Command SwiftCompile failed with a nonzero exit code Command SwiftGeneratePch em
前端
Maofu6 分钟前
从React项目 迁移到 Solid项目的踩坑记录
前端
薄荷味6 分钟前
ubuntu 服务器安装 docker
前端
Carlos_sam7 分钟前
OpenLayers:如何控制Overlay的层级?
前端·javascript
莫循瑾木11 分钟前
Vue3 Composition API 完全指南
前端·vue.js·前端工程化
初辰ge14 分钟前
后端说“基本增删改查都写好了,就差切图仔对接口了!”——我一怒之下撸了个代码生成器
前端·vue.js
原生高钙15 分钟前
源码级详解,React 如何利用 setState 进行数据管理的:
前端
雾月5518 分钟前
LeetCode 914 卡牌分组
java·开发语言·算法·leetcode·职场和发展
想跑步的小弱鸡21 分钟前
Leetcode hot 100(day 4)
算法·leetcode·职场和发展
Fantasydg23 分钟前
DAY 35 leetcode 202--哈希表.快乐数
算法·leetcode·散列表