"Clean Code Handbook"
该资源是一本专注于编程实践和面试准备的指南,特别是针对LeetCode中的常见问题。"Clean Code Handbook" 提供了多个编程挑战的解决方案,涵盖数组/字符串、数学、链表以及二叉树等多个核心计算机科学主题。这本书的目标是帮助读者提升代码质量,并为技术面试做好准备。
### 第一章:数组/字符串
1. **两数之和**:在给定的整数数组中找到两个数,使得它们的和等于一个特定的目标值。
2. **有序数组的两数之和**:与第一题相似,但数组已排序,可以通过更高效的算法解决。
3. **设计数据结构**:实现一个两数之和的数据结构,支持添加元素和查询两个元素之和是否等于目标值。
4. **验证回文串**:检查一个字符串是否是回文,即正读反读都一样。
5. **实现strStr()**:在主字符串中查找子字符串的第一次出现位置。
6. **反转字符串中的单词**:将句子中的单词顺序反转。
7. **反转字符串中的单词 II**:与第六题类似,但要考虑单词间的空格。
8. **字符串转整数 (atoi)**:将字符串转换为整数,处理溢出和非法输入情况。
9. **验证数字**:判断字符串是否能表示一个有效的数字。
10. **无重复字符的最长子串**:找到给定字符串中最长的不包含重复字符的子串。
11. **最长子串,最多两种字符**:找到具有最多两种不同字符的最长子串。
12. **缺失范围**:给定一个排序数组,找出所有缺失的连续子数组范围。
13. **最长回文子串**:找到给定字符串中最长的回文子串。
14. **编辑距离**:计算将一个字符串转换为另一个字符串所需的最少单字符编辑操作次数。
15. **一次读取n个字符**:在限制每次只能读4个字符的情况下,一次性读取n个字符。
16. **一次读取n个字符(多次调用)**:同上,但允许多次调用。
### 第二章:数学
17. **反转整数**:反转一个整数,同时处理溢出问题。
18. **加一**:给定一个非负整数,向其加一并处理进位。
19. **回文数**:判断一个整数是否为回文数。
### 第三章:链表
20. **合并两个排序的链表**:将两个已排序的链表合并成一个有序链表。
21. **两数相加**:将两个链表表示的非负整数相加。
22. **两两交换链表中的节点**:将链表中的相邻节点两两交换。
23. **合并K个排序链表**:合并多个已排序的链表,保持整体有序。
24. **带有随机指针的复制列表**:复制一个带随机指针的链表,每个节点都有一个随机指针,可能指向链表中的任何其他节点。
### 第四章:二叉树
25. **验证二叉搜索树**:判断一个二叉树是否为二叉搜索树,其中每个节点的左子树只包含小于它的节点,右子树只包含大于它的节点。
26. **二叉树的最大深度**:计算二叉树的最大深度,深度定义为从根节点到最远叶子节点的最长路径上的边数。
这本书通过解决这些实际编程问题,帮助程序员掌握编写清晰、高效代码的技巧,同时也为面试提供了宝贵的实战经验。它强调了理解数据结构和算法的重要性,这些都是成为优秀程序员的关键技能。