本篇汇总了剑指offer所有题的题解,然后就题目进行了简单的分类!
错题和心得分享请看下面这篇文章===>错题集(二刷出错记录+心得分享)
写在前面
一般来说对于刷剑指offer分为几刷
- 速刷,不懂直接题解,获得正解。
- 默刷,看一遍题解,进行默写,进行巩固
- 日刷,每日三省吾身,隔日能刷方更进一步
- 月刷,在完成全部题目后,要时不时的进行回顾“思而不学则殆”,要一直动起来,刷起来,速度更是要快。“题刷百变,其意必现”
最后,我们才可以刷更多更有难度的题,但是万变不离其宗,最简单的剑指offer就是我们必修的内功!
题目题解表
剑指offer题号 | 题解地址 | 总而言之 |
---|---|---|
JT1 | 二维数组中的查找 | 优雅的暴力总是那么迷人 |
JT2 | 替换空格 | 花里胡哨终会将时间错付 |
JT3 | 从尾到头打印链表 | 为了节约空间我选择自转 |
JT4 | 重建二叉树 | 破镜难以重圆,但是二叉树可以 |
JT5 | 用两个栈实现队列 | 要用魔法打败魔法 |
JT6 | 旋转数组的最小数字 | 谁暴力谁是傻子 |
JT7 | Fibonacci数列 | 记忆化搜索很重要 |
JT8 | 跳台阶 | 我一眼就看出不是跳台阶 |
JT9 | 变态跳台阶 | 一下支棱n级台阶,真牛 |
JT10 | 矩形覆盖 | 万事有起因,答案其中隐 |
JT11 | 二进制中1的个数 | n&(n-1)你不得不知道の含义呀0.0! |
JT12 | 数值的整数次方 | 抛砖引玉我们说说【快速幂】算法! |
JT13 | 调整数组循序使奇数位于偶数前面 | 过于简单 |
JT14 | 链表中倒数第k个结点 | 震惊!!!双指针相对运动轻松解题 |
JT15 | 反转链表 | 不积硅步无以至千里 |
JT16 | 合并两个排序的链表 | 不忘初心,方得始终 |
JT17 | 树的子结构 | 树的比较都是递归 |
JT18 | 二叉树的镜像 | 树的镜像也是递归 |
JT19 | 顺时针打印矩阵 | 正方形打野 |
JT20 | 包含min函数的栈 | 把最小值存下来不就好了? |
JT21 | 栈的压入,弹出序列 | 一直等到你的出现 |
JT22 | 从上往下打印二叉树 | 用队列好好保护树上的每个她! |
JT23 | 二叉搜索树的后序遍历序列 | 先苦后甜 |
JT24 | 二叉树中和为某一值的路径 | 答应我,不要放弃,把树跑完就行了 |
JT25 | 复杂链表的复制 | 按部就班太难,map最懂我 |
JT26 | 二叉搜索树与双向链表 | 琢磨了几天,挺抽象一题 |
JT27 | 字符串的排列 | 醉翁之意不在酒 |
JT28 | 数组种出现次数超过一半的数字 | 用哈希表支棱就完事了! |
JT29 | 最小的K个数 | 靓仔靓女,快进来学习快排讷! |
JT30 | 连续子数组的最大和 | 动态规划【全网最详图解】 |
JT31 | 从1到n整数中1出现的次数 | 万物有规律,特别是数字 |
JT32 | 把数组排成最小的数 | sort()竟然可以编写排序规则! |
JT33 | 丑数 | 客官进来抽个幸运数字呗! |
JT34 | 第一个只出现一次的字符 | 之前没有,之后也是 |
JT35 | 数组中的逆序对 | 归并排序很勇嘛! |
JT36 | 两个链表的第一个公共结点 | 与数组找相同值何异? |
JT37 | 数字在升序数组中出现的次数 | 二分向两端走到尽头! |
JT38 | 二叉树的深度 | 同学们,这题我好像讲过呢! |
JT39 | 平衡二叉树 | 自上而下还是自下而上呢? |
JT40 | 数组中只出现一次的两个数字 | 哈希或者排序查找! |
JT41 | 和为S的连续正数序列 | 我称之为尺取法,进退之间张弛有度。 |
JT42 | 和为S的两个数字 | 两次哈希表,出场次序很重要 |
JT43 | 左旋转字符串 | 所有失去的都以另一种方式回归! |
JT44 | 翻转单词顺序列 | 横看成岭侧成峰! |
JT45 | 扑克牌顺子 | 是不是顺子看首尾差的长度就得了! |
JT46 | 孩子们的游戏 | 约瑟夫环问题详解! |
JT47 | 1+2+3+…n | 不准用乘除,for,while,if,switch等哟! |
JT48 | 不用加减乘除做加法 | 快进来研究凡学吧! |
JT49 | 把字符串转换成整数 | 要求不使用库函数! |
JT50 | 数组中重复的数字 | 没你想得那么简单 |
JT51 | 构建乘积数组 | 不能使用除法! |
JT52 | 正则表达式 | 我真的震惊,竟然要用动态规划! |
JT53 | 表示数值的字符串 | 别小瞧这题,陷阱真滴多! |
JT54 | 字符流中第一个不重复的字符 | 感觉前面做过,就是hash表呀,难道我肤浅了? |
JT55 | 链表中环的入口结点 | 所有的偶遇都是蓄谋已久!详细图解哦! |
JT56 | 删除链表中重复的结点 | 戴上新表头,更加方便! |
JT57 | 二叉树的下一个结点 | 我准备了菜鸟解法和大神解法,大家都能吃饱! |
JT58 | 对称的二叉树 | 和第十八题异曲同工呀! |
JT59 | 按之字形顺序打印二叉树 | 队列和堆栈都可以哦! |
JT60 | 把二叉树打印成多行 | 这个肯定和59题是兄弟题,换了个说法而已! |
JT61 | 序列化二叉树 | strcpy函数接口是 char类型,不能直接string哦! |
JT62 | 二叉搜索树的第k个结点 | 二叉树有个江湖规矩! |
JT63 | 数据流中的中位数 | 和ccf大中小一个意思! |
JT64 | 滑动窗口的最大值 | deque双向队列滑动窗口! |
JT65 | 矩阵中的路径 | 算是剑指offer里唯一的非二叉树非链表dfs题吧,也比较经典! |
JT66 | 机器人的运动范围 | 遍历即可! |
JT67 | 剪绳子 | 巧算或者动态规划!都挺好! |
题目分类表
数组
剑指offer题号 | 题解地址 |
---|---|
JT1 | 二维数组中的查找 |
JT7 | Fibonacci数列 |
JT13 | 调整数组循序使奇数位于偶数前面 |
JT19 | 顺时针打印矩阵 |
JT28 | 数组种出现次数超过一半的数字 |
JT32 | 把数组排成最小的数 |
JT35 | 数组中的逆序对 |
JT37 | 数字在升序数组中出现的次数 |
JT42 | 和为S的两个数字 |
JT50 | 数组中重复的数字 |
JT51 | 构建乘积数组 |
JT66 | 机器人的运动范围 |
字符串
剑指offer题号 | 题解地址 |
---|---|
JT2 | 替换空格 |
JT27 | 字符串的排列 |
JT34 | 第一个只出现一次的字符 |
JT43 | 左旋转字符串 |
JT44 | 翻转单词顺序列 |
JT45 | 扑克牌顺子 |
JT49 | 把字符串转换成整数 |
JT52 | 正则表达式 |
JT53 | 表示数值的字符串 |
JT54 | 字符流中第一个不重复的字符 |
链表
剑指offer题号 | 题解地址 |
---|---|
JT3 | 从尾到头打印链表 |
JT14 | 链表中倒数第k个结点 |
JT15 | 反转链表 |
JT16 | 合并两个排序的链表 |
JT25 | 复杂链表的复制 |
JT26 | 二叉搜索树与双向链表 |
JT36 | 两个链表的第一个公共结点 |
JT55 | 链表中环的入口结点 |
JT56 | 删除链表中重复的结点 |
树
剑指offer题号 | 题解地址 |
---|---|
JT4 | 重建二叉树 |
JT17 | 树的子结构 |
JT18 | 二叉树的镜像 |
JT22 | 从上往下打印二叉树 |
JT23 | 二叉搜索树的后序遍历序列 |
JT24 | 二叉树中和为某一值的路径 |
JT38 | 二叉树的深度 |
JT39 | 平衡二叉树 |
JT57 | 二叉树的下一个结点 |
JT58 | 对称的二叉树 |
JT59 | 按之字形顺序打印二叉树 |
JT60 | 把二叉树打印成多行 |
JT61 | 序列化二叉树 |
JT62 | 二叉搜索树的第k个结点 |
数学
剑指offer题号 | 题解地址 |
---|---|
JT11 | 二进制中1的个数 |
JT12 | 数值的整数次方 |
JT31 | 从1到n整数中1出现的次数 |
JT33 | 丑数 |
JT46 | 孩子们的游戏 |
JT47 | 1+2+3+…n |
JT48 | 不用加减乘除做加法 |
JT67 | 剪绳子 |
其他知识点
剑指offer题号 | 题解地址 | 知识点 |
---|---|---|
JT5 | 用两个栈实现队列 | 栈 |
JT6 | 旋转数组的最小数字 | 二分 |
JT8 | 跳台阶 | 递归 |
JT9 | 变态跳台阶 | 贪心 |
JT10 | 矩形覆盖 | 递归 |
JT20 | 包含min函数的栈 | 栈 |
JT21 | 栈的压入,弹出序列 | 栈 |
JT29 | 最小的K个数 | 快排 |
JT30 | 连续子数组的最大和 | 动态规划 |
JT40 | 数组中只出现一次的两个数字 | 哈希 |
JT41 | 和为S的连续正数序列 | 穷举 |
JT63 | 数据流中的中位数 | 堆,排序 |
JT64 | 滑动窗口的最大值 | 双向队列 |
JT65 | 矩阵中的路径 | dfs |