#9 回文数
- 保存的状态
- 未消费的高位整数与已经反转的低位。
- 查询与更新
- 逐次取最低位,消费原数位,把低位积累为反向表示。
- 正确性契约
- 两部分分别表示同一整数尚未处理与已经处理的数位。
- 边界与增量
- 负数和非零尾零先排除;奇数位中心不能重复比较。
Unit 00 · 数值表示、哈希与状态记录基础
本单元先拆开整数数位,再建立 set、dict、键和值、频次、一一映射、规范化键、前缀状态与查询—更新顺序。后续每道题都会回到同一个问题:当前需要记住什么,怎样把它变成稳定的键?
%、//、基数与进位;键是状态的“地址标签”。相同键意味着算法认为两个对象在当前任务下等价。
dict 的值可以是索引、次数、配对对象或候选集合;变量名和不变量决定它的语义。
先查询历史,再写入当前状态,常用于避免当前对象错误地匹配自己。
把不同外观但本质等价的对象转成同一个、稳定且可哈希的表示。
数组与哈希:从数值表示出发,练习用集合、映射与频次记录状态。
这里的梯度描述认知任务的递进,不等同于题库的难度标签。点击题目可进入对应单元。
用同一组问题定位每个单元,再观察迁移题改变了哪个条件。进入写代码环节后,学习地图会收起,留出独立思考的空间。
这不是直接要求你从空白写完整代码。先连接 Unit 00 的“数位提取”,再识别新增状态,随后用槽位拼接算法,最后运行拼接结果观察变量轨迹。
给你一个整数 x。如果 x 正序和倒序读都相同,返回 true;否则返回 false。
-2³¹ ≤ x ≤ 2³¹ - 1
x % 10 取出最低位;x //= 10 删除最低位。
把取出的右半数位逆序拼成 reversed_half,再与剩余左半比较。
迁移不是换数字重新做,而是复用同一个“逐位消费”操作,并新增“右半部分状态”。
| Unit 00 数位实验 | LeetCode #9 |
|---|---|
number:尚未消费的数位 | x:尚未消费的左半部分 |
digit:本轮最低位 | digit:加入反转右半部分 |
| 只观察提取结果 | reversed_half:保存已提取数位的逆序 |
| 直到 number == 0 | 只处理到 x <= reversed_half |
先反转一半可以减少工作。奇数位数字最终需要忽略 reversed_half 的中间位。
先点击左侧片段,再点击右侧目标槽位。每个槽位只接收一个片段;可随时清空重拼。
当题目要求反复判断历史信息时,不要先问“是不是哈希题”,而要先写清楚:键代表什么、值代表什么、相同键意味着什么,以及查询与更新谁先发生。
不会倒计时,也不会自动进入 Unit 01。你可以复习任一阶段、继续运行迁移轨迹,或在准备好后手动进入下一题。