剑指Offer复盘(四)——高质量代码

主要内容

高质量代码主要是原书第3章的内容,代码需要有以下几点注意:

  • 规范性:变量命名、布局合理
  • 完整性:边界条件的处理、数据类型表示的范围、错误输入

面试题16

求一个double数据的整数次方。看起来是考察快速幂计算的内容。但是需要考虑细节问题,边界条件出现在指数为0和为1的情况,还有底数指数同时为0时造成歧义的地方如何处理,同时还要考虑结果为负数的情况。

面试题17

打印n位数,主要考虑整型表达范围不足,因此需要用字符串模拟。需要小心处理进位的问题。

书中还提到了一个递归的写法比较巧妙值得学习,主要是利用了打印的内容本身是n位数的全排列。

面试题18

删除链表节点。主要思想是链表的删除并不需要真的删除,只需要覆盖当前节点的数据即可,难点是处理特殊情况:只有一个节点/删除尾节点。

面试题19

恶心题,跳过。

面试题20

太繁琐,而且题目描述和正常人理解的数值不一样?

面试题21

数组奇偶数的调整,采用双指针从前后进行扫描,思路和快排中的划分有点相似。

面试题22

链表第k个节点,典型的快慢指针题目,需要注意本身数据小于k的特殊情况。

面试题23

链表的环入口,典型快慢指针题目。一个指针的速度是另一个的两倍,直到两个指针相遇,此时再把其中一个指针设置为头节点,然后两个指针同速移动至再次相遇即可。

图片来自网络

面试题24

反转链表,可以递归实现也可以循环实现,递归的代码看起来简洁一些。同时递归的代码可以扩展到反转前k个节点和部分区间反转和k个一组反转。

面试题25

合并排序链表,和归并排序中的合并相似,需要注意边界条件。其实直接递归实现比较简洁。

面试题26

树的子结构,只是定义了新的概念来干扰。关键还要抓住树结构的本质,二叉树结构是递归定义的,显然子结构也要从递归角度出发查找,因此就是捋清楚两个树直接父节点/子节点的对应关系。

猜你喜欢

转载自www.cnblogs.com/hesun/p/13379930.html