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;
}

本文完,感谢阅读🌹

相关推荐
bin91531 小时前
DeepSeek 助力 Vue 开发:打造丝滑的复制到剪贴板(Copy to Clipboard)
前端·javascript·vue.js·ecmascript·deepseek
计算机小白一个2 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
晴空万里藏片云2 小时前
elment Table多级表头固定列后,合计行错位显示问题解决
前端·javascript·vue.js
曦月合一2 小时前
html中iframe标签 隐藏滚动条
前端·html·iframe
奶球不是球2 小时前
el-button按钮的loading状态设置
前端·javascript
万事可爱^3 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
kidding7233 小时前
前端VUE3的面试题
前端·typescript·compositionapi·fragment·teleport·suspense
大数据追光猿4 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Σίσυφος19005 小时前
halcon 条形码、二维码识别、opencv识别
前端·数据库
学代码的小前端5 小时前
0基础学前端-----CSS DAY13
前端·css