《剑指offer》第二版编程题目的Python语言实现。也记录了自己的解题思路,并且每道题目都附有对应的LeetCode链接,方便对代码进行测试。
注:
1、部分面试题的解题思路包含LaTeX公式和图片。在网页端进行阅览时,图片是不显示,可下载后再阅览。
2、题目序号带有超链接的均为已经被实现的题目。除了44、51。
题目序号 | 本人的题解 | LeetCode链接 | 题目序号 | 本人的题解 | LeetCode链接 |
---|---|---|---|---|---|
1 | 赋值运算符函数 | 未收录 | 9 | 用两个栈实现队列 | 用两个栈实现队列 |
2 | 实现Singleton模式 | 未收录 | 10 | 斐波那契数列 | 斐波那契数列、青蛙跳台阶问题 |
3 | 数组中重复出现的数字 | 数组中重复出现的数字 | 11 | 旋转数组的最小数字 | 旋转数组的最小数字 |
4 | 二维数组中的查找 | 二维数组中的查找 | 12 | 矩阵中的路径 | 矩阵中的路径 |
5 | 替换空格 | 替换空格、 合并两个有序数组 | 13 | 机器人的运动范围 | 机器人的运动范围 |
6 | 从尾到头打印链表 | 从尾到头打印链表 | 14 | 剪绳子 | 剪绳子 |
7 | 重建二叉树 | 重建二叉树 | 15 | 二进制中1的个数 | 二进制中1的个数 |
8 | 二叉树的下一节点 | 后继者 |
题目序号 | 本人的题解 | LeetCode链接 | 题目序号 | 本人的题解 | LeetCode链接 |
---|---|---|---|---|---|
16 | 数值的整数次方 | 数值的n次方 | 22 | 链表中倒数第k个节点 | 链表中倒数第k个节点 |
17 | 打印从1到最大的n位数 | 打印从1到最大的n位数 | 23 | 链表中环的入口节点 | 链表中环的入口节点 |
18 | 删除链表的节点 | 删除链表的节点 | 24 | 反转链表 | 反转链表 |
19 | 正则表达式匹配 | 正则表达式匹配 | 25 | 合并两个排序的链表 | 合并两个排序的链表 |
20 | 表示数组的字符串 | 表示数组的字符串 | 26 | 树的子结构 | 树的子结构 |
21 | 调整数组顺序使奇数位于偶数的前面 | 调整数组顺序使奇数位于偶数的前面 |
题目序号 | 本人的题解 | LeetCode链接 | 题目序号 | 本人的题解 | LeetCode链接 |
---|---|---|---|---|---|
27 | 二叉树的镜像 | 二叉树的镜像 | 33 | 二叉搜索树的后序遍历序列 | 二叉搜索树的后序遍历序列 |
28 | 对称的二叉树 | 对称的二叉树 | 34 | 二叉树中和为某一值的路径 | 二叉树中和为某一值的路径 |
29 | 顺时针打印矩阵 | 顺时针打印矩阵 | 35 | 复杂链表的复制 | 复杂链表的复制 |
30 | 包含min函数的栈 | 包含min函数的栈 | 36 | 二叉搜索树与双向链表 | 二叉搜索树与双向链表 |
31 | 栈的压入、弹出序列 | 栈的压入、弹出序列 | 37 | 序列化二叉树 | 序列化二叉树 |
32 | 从上到下打印二叉树 | 从上到下打印二叉树 | 38 | 字符串的排列 | 字符串的排列 |
题目序号 | 本人的题解 | LeetCode链接 | 题目序号 | 本人的题解 | LeetCode链接 |
---|---|---|---|---|---|
39 | 数组出现次数超过一半的数字 | 数组出现次数超过一半的数字 | 46 | 把数字翻译成字符串 | 把数字翻译成字符串 |
40 | 最小的k个数 | 最小的k个数 | 47 | 礼物的最大价值 | 礼物的最大价值 |
41 | 数据流的中位数 | 数据流的中位数 | 48 | 最长不含重复字符的子字符串 | 最长不含重复字符的子字符串 |
42 | 连续子数组的最大和 | 连续子数组的最大和 | 49(再看一次) | 丑数 | 丑数 |
43 | 1到n整数中1出现的次数 | 1到n整数中1出现的次数 | 50 | 第一个只出现一次的字符 | 第一个只出现一次的字符 |
44 | 数字序列中某一位的数字 | 数字序列中某一位的数字 | 51(再看一次) | 数组中的逆序对 | 数组中的逆序对 |
45(还未优化) | 把数组排成最小的数 | 把数组排成最小的数 | 52 | 两个链表的第一个公共节点 | 两个链表的第一个公共节点 |
题目序号 | 本人的题解 | LeetCode链接 | 题目序号 | 本人的题解 | LeetCode链接 |
---|---|---|---|---|---|
53 | 在排序数组中查找数字 | 在排序数组中查找数字 在排序数组中查找元素的第一个和最后一个位置 | 60(很有意思的动态规划) | n个骰子的点数 | n个骰子的点数 |
54 | 二叉搜索树的第k大节点 | 二叉搜索树的第k大节点 | 61 | 扑克牌中的顺子 | 扑克牌中的顺子 |
55 | 二叉树的深度 | 二叉树的深度 | 62 | 圆圈中最后剩下的数字 | 圆圈中最后剩下的数字 |
56 | 数组中数字出现的次数 | 数组中数字出现的次数 | 63 | 股票的最大利润 | 股票的最大利润 |
57 | 和为s的数字 | 和为s的两个数字 | 64 | 求1+2+...+n | 求1+2+...+n |
58 | 翻转字符串 | 翻转单词顺序 翻转左侧字符串 | 65 | 不用加减乘除做加法 | 不用加减乘除做加法 |
59 | 队列的最大值 | 滑动窗口的最大值 队列的最大值 | 66 | 构建乘积数组 | 构建乘积数组 |
题目序号 | 本人的题解 | LeetCode链接 | 题目序号 | 本人的题解 | LeetCode链接 |
---|---|---|---|---|---|
67 | 把字符串转换为整数 | 把字符串转换成整数 | 68 | 树中两个节点的最低公共祖先 | 68 - I. 二叉搜索树的最近公共祖先、68 - II. 二叉树的最近公共祖先 |