# 剑指 Offer 题解 ## 前言 题目来自《何海涛. 剑指 Offer[M]. 电子工业出版社, 2012.》,刷题网站推荐: - [牛客网](https://www.nowcoder.com/ta/coding-interviews?from=cyc_github) - [Leetcode](https://leetcode-cn.com/problemset/lcof/) ## 数组与矩阵 - [3. 数组中重复的数字](3.%20数组中重复的数字.md) - [4. 二维数组中的查找](4.%20二维数组中的查找.md) - [5. 替换空格](5.%20替换空格.md) - [29. 顺时针打印矩阵](29.%20顺时针打印矩阵.md) - [50. 第一个只出现一次的字符位置](50.%20第一个只出现一次的字符位置.md) ## 栈队列堆 - [9. 用两个栈实现队列](9.%20用两个栈实现队列.md) - [30. 包含 min 函数的栈](30.%20包含%20min%20函数的栈.md) - [31. 栈的压入、弹出序列](31.%20栈的压入、弹出序列.md) - [40. 最小的 K 个数](40.%20最小的%20K%20个数.md) - [41.1 数据流中的中位数](41.1%20数据流中的中位数.md) - [41.2 字符流中第一个不重复的字符](41.2%20字符流中第一个不重复的字符.md) - [59. 滑动窗口的最大值](59.%20滑动窗口的最大值.md) ## 双指针 - [57.1 和为 S 的两个数字](57.1%20和为%20S%20的两个数字.md) - [57.2 和为 S 的连续正数序列](57.2%20和为%20S%20的连续正数序列.md) - [58.1 翻转单词顺序列](58.1%20翻转单词顺序列.md) - [58.2 左旋转字符串](58.2%20左旋转字符串.md) ## 链表 - [6. 从尾到头打印链表](6.%20从尾到头打印链表.md) - [18.1 在 O(1) 时间内删除链表节点](18.1%20在%20O(1)%20时间内删除链表节点.md) - [18.2 删除链表中重复的结点](18.2%20删除链表中重复的结点.md) - [22. 链表中倒数第 K 个结点](22.%20链表中倒数第%20K%20个结点.md) - [23. 链表中环的入口结点](23.%20链表中环的入口结点.md) - [24. 反转链表](24.%20反转链表.md) - [25. 合并两个排序的链表](25.%20合并两个排序的链表.md) - [35. 复杂链表的复制](35.%20复杂链表的复制.md) - [52. 两个链表的第一个公共结点](52.%20两个链表的第一个公共结点.md) ## 树 - [7. 重建二叉树](7.%20重建二叉树.md) - [8. 二叉树的下一个结点](8.%20二叉树的下一个结点.md) - [26. 树的子结构](26.%20树的子结构.md) - [27. 二叉树的镜像](27.%20二叉树的镜像.md) - [28. 对称的二叉树](28.%20对称的二叉树.md) - [32.1 从上往下打印二叉树](32.1%20从上往下打印二叉树.md) - [32.2 把二叉树打印成多行](32.2%20把二叉树打印成多行.md) - [32.3 按之字形顺序打印二叉树](32.3%20按之字形顺序打印二叉树.md) - [33. 二叉搜索树的后序遍历序列](33.%20二叉搜索树的后序遍历序列.md) - [34. 二叉树中和为某一值的路径](34.%20二叉树中和为某一值的路径.md) - [36. 二叉搜索树与双向链表](36.%20二叉搜索树与双向链表.md) - [37. 序列化二叉树](37.%20序列化二叉树.md) - [54. 二叉查找树的第 K 个结点](54.%20二叉查找树的第%20K%20个结点.md) - [55.1 二叉树的深度](55.1%20二叉树的深度.md) - [55.2 平衡二叉树](55.2%20平衡二叉树.md) - [68. 树中两个节点的最低公共祖先](68.%20树中两个节点的最低公共祖先.md) ## 贪心思想 - [14. 剪绳子](14.%20剪绳子.md) - [63. 股票的最大利润](63.%20股票的最大利润.md) ## 二分查找 - [11. 旋转数组的最小数字](11.%20旋转数组的最小数字.md) - [53. 数字在排序数组中出现的次数](53.%20数字在排序数组中出现的次数.md) ## 分治 - [16. 数值的整数次方](16.%20数值的整数次方.md) ## 搜索 - [12. 矩阵中的路径](12.%20矩阵中的路径.md) - [13. 机器人的运动范围](13.%20机器人的运动范围.md) - [38. 字符串的排列](38.%20字符串的排列.md) ## 排序 - [21. 调整数组顺序使奇数位于偶数前面](21.%20调整数组顺序使奇数位于偶数前面.md) - [45. 把数组排成最小的数](45.%20把数组排成最小的数.md) - [51. 数组中的逆序对](51.%20数组中的逆序对.md) ## 动态规划 - [10.1 斐波那契数列](10.1%20斐波那契数列.md) - [10.2 矩形覆盖](10.2%20矩形覆盖.md) - [10.3 跳台阶](10.3%20跳台阶.md) - [10.4 变态跳台阶](10.4%20变态跳台阶.md) - [42. 连续子数组的最大和](42.%20连续子数组的最大和.md) - [47. 礼物的最大价值](47.%20礼物的最大价值.md) - [48. 最长不含重复字符的子字符串](48.%20最长不含重复字符的子字符串.md) - [49. 丑数](49.%20丑数.md) - [60. n 个骰子的点数](60.%20n%20个骰子的点数.md) - [66. 构建乘积数组](66.%20构建乘积数组.md) ## 数学 - [39. 数组中出现次数超过一半的数字](39.%20数组中出现次数超过一半的数字.md) - [62. 圆圈中最后剩下的数](62.%20圆圈中最后剩下的数.md) - [43. 从 1 到 n 整数中 1 出现的次数](43.%20从%201%20到%20n%20整数中%201%20出现的次数.md) ## 位运算 - [15. 二进制中 1 的个数](15.%20二进制中%201%20的个数.md) - [56. 数组中只出现一次的数字](56.%20数组中只出现一次的数字.md) ## 其它 - [17. 打印从 1 到最大的 n 位数](17.%20打印从%201%20到最大的%20n%20位数.md) - [19. 正则表达式匹配](19.%20正则表达式匹配.md) - [20. 表示数值的字符串](20.%20表示数值的字符串.md) - [44. 数字序列中的某一位数字](44.%20数字序列中的某一位数字.md) - [46. 把数字翻译成字符串](46.%20把数字翻译成字符串.md) - [61. 扑克牌顺子](61.%20扑克牌顺子.md) - [64. 求 1+2+3+...+n](64.%20求%201+2+3+...+n.md) - [65. 不用加减乘除做加法](65.%20不用加减乘除做加法.md) - [67. 把字符串转换成整数](67.%20把字符串转换成整数.md)