【LeetCode】每日一题 2023_11_25 二叉树中的伪回文路径(dfs,数组/位运算)

文章目录

  • 刷题前唠嗑
  • 题目:二叉树中的伪回文路径
    • 题目描述
    • 代码与解题思路
    • 偷看大佬题解
  • 结语

刷题前唠嗑


LeetCode?启动!!!

这个月第一次周末早起~

题目:二叉树中的伪回文路径

题目链接:1457. 二叉树中的伪回文路径

题目描述

代码与解题思路

func pseudoPalindromicPaths (root *TreeNode) (ans int) {cnt := make([]int, 10)dfs(root, cnt, &ans)return ans
}func dfs(root *TreeNode, cnt []int, ans *int) {if root == nil {return}cnt[root.Val]++defer func() { cnt[root.Val]-- }()if root.Left == nil && root.Right == nil {if isFalsePalindromes(cnt) {*ans++}return}dfs(root.Left, cnt, ans)dfs(root.Right, cnt, ans)
}func isFalsePalindromes(cnt []int) bool { // 回文串最多只能存在一个奇数个数的值odd := 0for _, v := range cnt {if v%2 == 1 {odd++}}return odd <= 1
}

我做这道题的主要思路就是 dfs 搜索整个二叉树,在搜索的过程中用一个数组记录数字的出现情况,然后在走完一条路之后,判断是否是伪回文串,主要有两个需要注意的地方:

  1. 如何判断是否是伪回文串?回文串只有两种可能,长度为奇数时,有一个值的个数是奇数,长度为偶数时,每个值的个数都是奇数。也就是只要数组中的值的个数是奇数的数量 <= 1 他就一定是伪回文串啦
  2. 在使用数组进行计数的时候,当 dfs 回退到上一级的时候,计数需要 --,不然之前的计数会影响新一条路径的计数

偷看大佬题解

func pseudoPalindromicPaths(root *TreeNode) int {return dfs(root, 0)
}func dfs(root *TreeNode, mask int) int {if root == nil {return 0}mask ^= 1 << root.Val // 修改 root.Val 出现次数的奇偶性if root.Left == root.Right { // root 是叶子节点if mask&(mask-1) == 0 {return 1}return 0}return dfs(root.Left, mask) + dfs(root.Right, mask)
}

大佬的题解太妙了,具体思路是这样的:

  1. 通过 10 个二进制位来表示这个十个数字,如果是值的数量是奇数则为 1,如果是偶数则为 0,这个是异或操作的结果
  2. 通过 mask&(mask-1),判断数量是奇数个的值有多少个,如果存在 1 个或者 0 个,使用 mask&(mask-1) 操作的结果就会等于 0,具体来说:如果是 mask 全为 0,& 任何数都为零(这就是存在 0 个数量的值是奇数的情况),如果是 mask 有一个位是 1,mask-1 这个操作会让一个 mask 中一个 1 的位置发生改变,也就是如果 mask 只存在一个 1,那使用 mask&(mask-1) 就会等于 0。(这就是存在 1 个数量的值是奇数的情况)

结语

学到了位运算的新用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20世纪的葡萄酒有哪些创新?

葡萄酒是用酵母发酵的&#xff0c;直到20世纪中叶&#xff0c;这一过程都依赖于自然产生的酵母。这些发酵的结果往往不一致&#xff0c;而且由于发酵时间长&#xff0c;容易腐败。 酿酒业最重要的进步之一是在20世纪50、60年代引进了地中海的纯发酵菌种酿酒酵母&#xff0c;俗称…

你要的fiddler快捷键全部在这里了,学最全的快捷键,做最快的IT程序员

一、常用三个快捷键 ctrlX :清空所有记录 CtrlF&#xff1a;查找 F12&#xff1a;启动或者停止抓包 使用 QuickExec Fiddler2 成了网页调试必备的工具&#xff0c;抓包看数据。Fiddler2自带命令行控制。 fiddler 命令行快捷键&#xff1a;ctrl q &#xff0c;然后 输入 help…

FunASR语音识别(解决-高并发线程问题)

文章目录 一、FunASR二、上代码&#xff08;队列解决线程并发问题&#xff09;三、测试 一、FunASR 在我的另一个博客有介绍FunASR,并且进行了语者分离&#xff0c;不过最近FunASR自带了语者分离&#xff0c;挺好挺好&#xff0c;但是一直看社区就是大家都用python写&#xff…

Codeforces Round #911 (Div. 2)

A.Cover in Water 题意&#xff1a; 有一个 1 n 1 \times n 1n的水池&#xff0c;里面有些格子可以加水&#xff0c;有些格子是被堵上的&#xff0c;你可以进行以下两种操作&#xff1a; 1.往一个空的格子里加水 2.移除一个有水的格子中的水&#xff0c;并将这些水添加到另…

合并区间[中等]

一、题目 以数组intervals表示若干个区间的集合&#xff0c;其中单个区间为intervals[i] [starti, endi]。请你合并所有重叠的区间&#xff0c;并返回一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间。 示例 1&#xff1a; 输入&#xff1a;intervals […

【笔记】小白学习电路维修

学习视频&#xff08;b站&#xff09;&#xff1a;从0开始学电路 从0开始学电路维修 p1 黄色长方体元件P2 故障率最高的元件p3带芯铜丝线圈是什么区分电感和变压器接入电路分析&#xff1a; p4 交流和直流分界线整流桥接线整流桥故障判断 带色环的不一定是电阻 p1 黄色长方体元…

Windows10-用户账户控制、Windows远程桌面

Windows10用户账户控制怎么设置白名单 问题引出&#xff1a; 安装低版本搜狗输入法后经常弹出用户账户控制 解决方案&#xff1a; 全局模式&#xff1a; UAC控制最早出现在Windows Vista中&#xff0c;用户帐户控制&#xff08;UAC&#xff09;是一项旨在防止对您的计算机…

Django视图层

一、请求与响应 视图函数 视图函数&#xff0c;简称视图&#xff0c;属于Django的视图层&#xff0c;默认定义在views.py文件中&#xff0c;是用来处理web请求信息以及返回响应信息的函数&#xff0c;所以研究视图函数只需熟练掌握两个对象即可&#xff1a;请求对象(HttpRequ…

web:[ZJCTF 2019]NiZhuanSiWei1

题目 点进题目&#xff0c;网页显示如下&#xff0c;需要代码审计 $_GET["text"]和$_GET["file"]来获取传入的两个参数text和file。使用isset()函数来检查$text变量是否已设置并且不为null。如果设置了并且不为null&#xff0c;则执行下面的逻辑。在下面的…

贪心算法(新坑)

贪心入门 概述&#xff1a; 贪心算法是一种在每一步选择中都采取当前最优解的策略&#xff0c;希望最终能够得到全局最优解的算法。简单来说&#xff0c;它会不断地做出局部最优的选择&#xff0c;相信通过这种选择最终能够达到全局最优。 举个例子来说明。假设你要从一个迷…

CCFCSP试题编号:202206-2试题名称:寻宝!大冒险!

一、题目 二、分析 因为藏宝图左下角位置一定是一棵树&#xff0c;所以只要把所有绿化图中每一棵树&#xff0c;与之相匹配&#xff0c;然后判断&#xff0c;是否整个藏宝图都是绿化图的一部分&#xff0c;如果是那就计数count1。所以来看&#xff0c;结果count最大也就是n(绿…

js 函数的防抖(debounce)与节流(throttle)

目录 序言&#xff1a; 防抖&#xff08;debounce&#xff09; 节流&#xff08;throttle&#xff09; 代码示例 附录&#xff1a; 关于节流/防抖函数中 context&#xff08;this&#xff09; 的指向解析&#xff1a; 防抖函数中的 this 指向 节流函数中的 this 指向 序…

进程和线程的关系

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;JavaEE &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 进程&线程 1. 什么是进程PCB 2. 什么是…

高等数学零基础篇复习笔记

预备章 零基础高等数学入门知识 第一节 集合、运算与关系 第二节 三角函数与反三角函数 三角函数的公式 反三角函数 第三节 常见不等式及数列 划重点 第一章 函数、极限与连续 第一节 函数及函数的初等特性 特殊函数 反函数 函数的初等特性 ①有界性 ②奇偶性 偶函数图像…

高中生分科考试--座位编排系统

这个系统是帮我一同学的哥哥的做的座位编排系统&#xff0c;他是某个学校的教育从事者 基本需求&#xff1a;就是能够根据他提供的各个分科班级同学的成绩单来选择相同分科的考场编排&#xff08;按成绩高低&#xff09;&#xff0c;同时输入相应的考场数&#xff0c;和每个考…

OpenJudge NOI 1.8 16:矩阵剪刀石头布 c语言

描述 Bart的妹妹Lisa在一个二维矩阵上创造了新的文明。矩阵上每个位置被三种生命形式之一占据&#xff1a;石头&#xff0c;剪刀&#xff0c;布。每天&#xff0c;上下左右相邻的不同生命形式将会发生战斗。在战斗中&#xff0c;石头永远胜剪刀&#xff0c;剪刀永远胜布&#…

解决git action发布报错:Input required and not supplied: upload_url

现象&#xff1a; 这个问题死活都找不到原因&#xff0c;后来打了一段调试的代码 - name: Debug Create Release Output run: | echo "Release ID: ${{ env.RELEASE_ID }}" echo "Release Upload URL: ${{ env.RELEASE_UPLOAD_URL }}" env: RELEASE_ID: ${…

05-鸿蒙学习之State、Prop、Link用法

05-鸿蒙学习之State、Prop、Link用法 Entry Component struct StateMangement {// State 必须初始化State name: string Hello Worldbuild() {Row() {Column() {Text(this.name).StateMangement_textStyle()Button(点击).StateMangement_btnStyle(() > {this.name this.n…

JAVA技术栈JVM

**Java虚拟机&#xff08;JVM&#xff09;详细概述** Java虚拟机&#xff08;Java Virtual Machine&#xff0c;简称JVM&#xff09;是Java平台的关键组成部分&#xff0c;负责在不同操作系统上执行Java字节码。它提供了内存管理、垃圾回收、安全性等关键功能&#xff0c;使得…

[nlp] 多语言大模型不同语种/语系数据的数据配比调节

在训练多语言的大型语言模型时,调整不同语种或语系数据的比例是一个重要的问题。理想情况下,模型应该能够平等地理解并生成所有支持的语言。然而,由于某些语言的数据可能比其他语言更容易获得(例如英语比哈萨克语),因此需要采取特定的策略来确保模型不会偏向于那些数据更…