![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
精致的王同学
毕业后进入京东
展开
-
25 图解剑指Offer 复杂链表的复制 Java题解
25 图解剑指Offer 复杂链表的复制 Java题解25 图解剑指Offer 复杂链表的复制 Java题解题目链接题目描述题解:图解:代码:复杂度25 图解剑指Offer 复杂链表的复制 Java题解题目链接题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题解:(1)如果链表为null,则返回null原创 2020-09-12 22:56:02 · 117 阅读 · 0 评论 -
24 图解剑指Offer 二叉树中和为某一值的路径 Java题解
24 图解剑指Offer 二叉树中和为某一值的路径 Java题解24 图解剑指Offer 二叉树中和为某一值的路径 Java题解题目链接题目描述题解:图解:代码:复杂度24 图解剑指Offer 二叉树中和为某一值的路径 Java题解题目链接题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。题解:(1)用ArrayList装二叉树节点的值,ArrayList<ArrayList&原创 2020-09-11 10:17:47 · 119 阅读 · 0 评论 -
23 图解剑指Offer 二叉搜索树的后序遍历序列 Java题解
23 图解剑指Offer 二叉搜索树的后序遍历序列 Java题解23 图解剑指Offer 二叉搜索树的后序遍历序列 Java题解题目链接题目描述题解:图解:代码:复杂度23 图解剑指Offer 二叉搜索树的后序遍历序列 Java题解题目链接题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题解:(1)已知二叉搜索树的后序遍历序列,由于二叉搜索树left<root<right, 所以 int原创 2020-06-29 17:46:30 · 3814 阅读 · 0 评论 -
22 图解剑指Offer 从上往下打印二叉树 Java题解
22 图解剑指Offer 从上往下打印二叉树 Java题解22 图解剑指Offer 从上往下打印二叉树 Java题解题目链接题目描述题解:图解:代码:复杂度22 图解剑指Offer 从上往下打印二叉树 Java题解题目链接题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。题解:思路:二叉树层序遍历,队列先入先出。1.创建一个ArrayList类型的list,创建一个队列queue->LinkedList。2.当根节点为null,直接返回list2.根节点入队。3.whi原创 2020-06-28 22:01:24 · 221 阅读 · 0 评论 -
21 图解剑指Offer 栈的压入、弹出序列 Java题解
21 图解剑指Offer 栈的压入、弹出序列 Java题解21 图解剑指Offer 栈的压入、弹出序列 Java题解题目链接题目描述题解:图解:代码:复杂度21 图解剑指Offer 栈的压入、弹出序列 Java题解题目链接题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意原创 2020-06-28 20:18:05 · 205 阅读 · 0 评论 -
20 图解剑指Offer 包含min函数的栈 Java题解
20 图解剑指Offer 包含min函数的栈 Java题解20 图解剑指Offer 包含min函数的栈 Java题解题目链接题目描述题解:图解:代码:复杂度20 图解剑指Offer 包含min函数的栈 Java题解题目链接题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。题解:1.主要实现push方法,stack1用来正常push元素,stack2原创 2020-06-27 21:46:48 · 149 阅读 · 0 评论 -
19 图解剑指Offer 顺时针打印矩阵 Java题解
19 图解剑指Offer 顺时针打印矩阵 Java题解19 图解剑指Offer 顺时针打印矩阵 Java题解题目链接题目描述题解:图解:代码:复杂度19 图解剑指Offer 顺时针打印矩阵 Java题解题目链接题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.题解:1.首原创 2020-06-27 21:20:06 · 237 阅读 · 0 评论 -
18 图解剑指Offer 二叉树的镜像 Java题解
18 图解剑指Offer 二叉树的镜像 Java题解18 图解剑指Offer 二叉树的镜像 Java题解题目链接题目描述题解:图解:代码:复杂度18 图解剑指Offer 二叉树的镜像 Java题解题目链接题目描述操作给定的二叉树,将其变换为源二叉树的镜像。题解:1.当二叉树根节点为null,或没有叶子节点的时候直接return;2. 创建一个temp临时节点,二叉树左右节点交换。3.如果root.left != null root.left = Mirror(root.left)4.如果原创 2020-06-27 19:37:03 · 228 阅读 · 3 评论 -
17 图解剑指Offer 树的子结构 Java题解
17 图解剑指Offer 树的子结构 Java题解17 图解剑指Offer 树的子结构 Java题解题目链接题目描述题解:图解:代码:复杂度17 图解剑指Offer 树的子结构 Java题解题目链接题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)题解:1.判断root1和root2是否为null 如果为null 返回 false。2. 返回 check(root1, root2) || HasSubtree(root1.left, root2)原创 2020-06-27 18:04:16 · 187 阅读 · 0 评论 -
16 图解剑指Offer 合并两个排序的链表 Java题解
16 图解剑指Offer 合并两个排序的链表 Java题解16 图解剑指Offer 合并两个排序的链表 Java题解题目链接题目描述题解:图解:代码:复杂度16 图解剑指Offer 合并两个排序的链表 Java题解题目链接题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题解:1.if判断list1是否为null,如果为null 直接返回list2。1.else if判断list2是否为null,如果为null 直接返回list1。每次递归找原创 2020-06-27 15:41:22 · 168 阅读 · 0 评论 -
15 图解剑指Offer 反转链表 Java题解
15 图解剑指Offer 反转链表 Java题解15 图解剑指Offer 反转链表 Java题解题目链接题目描述题解:图解:代码:复杂度15 图解剑指Offer 反转链表 Java题解题目链接题目描述输入一个链表,反转链表后,输出新链表的表头。题解:1.首先判断头节点是否为null ,如果为null,则返回null2.如果只有一个节点,返回head。3.创建三个指针 pre cur temp,当cur不为null时,temp用来存放cur.next,然后再把cur.next指向pre,最后p原创 2020-06-26 23:16:44 · 200 阅读 · 0 评论 -
14 图解剑指Offer 链表中倒数第k个节点 Java题解
14 图解剑指Offer 链表中倒数第k个节点 Java题解14 图解剑指Offer 链表中倒数第k个节点 Java题解题目链接题目描述题解:图解:代码:复杂度14 图解剑指Offer 链表中倒数第k个节点 Java题解题目链接题目描述输入一个链表,输出该链表中倒数第k个结点。题解:1.首先要判断头节点是否为null,如果为null,直接返回null。2.在遍历节点算出链表长度len,判断k是否大于len,如果大于len或k = 0返回null3. 设定两个指针 pre after ,pre原创 2020-06-26 22:20:01 · 170 阅读 · 0 评论 -
13 图解剑指Offer 调整数值顺序使奇数位于偶数前面 Java题解
13 图解剑指Offer 调整数值顺序使奇数位于偶数前面 Java题解13 图解剑指Offer 调整数值顺序使奇数位于偶数前面 Java题解题目链接题目描述题解:图解:代码:复杂度13 图解剑指Offer 调整数值顺序使奇数位于偶数前面 Java题解题目链接题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题解:1.创建两个ArrayList,一个放奇数,一个放偶数。2原创 2020-06-26 21:30:37 · 131 阅读 · 0 评论 -
12 图解剑指Offer 数值的整数次方 Java题解
12 图解剑指Offer 二进制中1的个数 Java题解12 图解剑指Offer 二进制中1的个数 Java题解题目链接题目描述题解:图解:代码:复杂度12 图解剑指Offer 二进制中1的个数 Java题解题目链接题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0题解:快速幂1.如果base 等于0,则返回0.2.如果exponent < 0,让 base = 1 / bas原创 2020-06-26 20:42:22 · 172 阅读 · 0 评论 -
11 图解剑指Offer 二进制中1的个数 Java题解
11 图解剑指Offer 二进制中1的个数 Java题解11 图解剑指Offer 二进制中1的个数 Java题解题目链接题目描述题解:图解:代码:复杂度11 图解剑指Offer 二进制中1的个数 Java题解题目链接题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。题解:n & (n - 1)的左右是消除最右边的1,每循环一次count++,即可求出1的个数,while循环直到 n 等于0。图解:代码:public class Solution {原创 2020-06-26 17:58:10 · 159 阅读 · 0 评论 -
10 图解剑指Offer 矩形覆盖 Java题解
10 图解剑指Offer 矩形覆盖 Java题解10 图解剑指Offer 矩形覆盖 Java题解题目链接题目描述题解:图解:代码:复杂度10 图解剑指Offer 矩形覆盖 Java题解题目链接题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:题解:具体看图解思路: 斐波那契额数列问题,此题前n项和公式 f(n) = f(n - 1) + f(n -2) (n>原创 2020-06-25 19:34:01 · 202 阅读 · 0 评论 -
09 图解剑指Offer 变态跳台阶 Java题解
08 图解剑指Offer 青蛙跳台阶 Java题解09 图解剑指Offer 变态跳台阶 Java题解题目链接题目描述题解:图解:代码:复杂度09 图解剑指Offer 变态跳台阶 Java题解题目链接题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解:可以想像青蛙还有最后一步就跳到n阶,由于青蛙可以最多跳n阶,所以青蛙跳上n阶台阶的方法等于之前所有阶跳台阶跳法的总和。由此可推导如下公式:f(n) = f(n - 1) +f(原创 2020-06-25 19:00:32 · 135 阅读 · 0 评论 -
08 图解剑指Offer 青蛙跳台阶 Java题解
08 图解剑指Offer 青蛙跳台阶 Java题解08 图解剑指Offer 青蛙跳台阶 Java题解题目链接题目描述题解:图解:代码:复杂度08 图解剑指Offer 青蛙跳台阶 Java题解题目链接题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题解:思路: 斐波那契额数列问题,此题前n项和公式 f(n) = f(n - 1) + f(n -2) (n>=3)注意此题 target = 0 结果为0, targ原创 2020-06-25 16:04:48 · 231 阅读 · 0 评论 -
07 图解剑指Offer 斐波那契额数列 Java题解
07 图解剑指Offer 斐波那契额数列 Java题解07 图解剑指Offer 斐波那契额数列 Java题解题目链接题目描述题解:图解:代码:复杂度07 图解剑指Offer 斐波那契额数列 Java题解题目链接题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39题解:思路: 斐波那契额数列前n项和公式 f(n) = f(n - 1) + f(n -2) (n>=2)根据公式可以用递归解决此类问题,但是原创 2020-06-25 15:29:19 · 128 阅读 · 0 评论 -
06 图解剑指Offer 旋转数组的最小数字 Java题解
06 图解剑指Offer 旋转数组的最小数字 Java题解06 图解剑指Offer 旋转数组的最小数字 Java题解题目链接题目描述题解:图解:代码:复杂度06 图解剑指Offer 旋转数组的最小数字 Java题解题目链接题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回原创 2020-06-25 10:49:15 · 150 阅读 · 0 评论 -
05 图解剑指Offer 两个栈实现队列 Java题解
05 剑指Offer 两个栈实现队列 Java题解05 剑指Offer 两个栈实现队列 Java题解题目链接题目描述题解:图解:代码:复杂度05 剑指Offer 两个栈实现队列 Java题解题目链接题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题解:思路:两个栈实现队列的push和pop ,push方法只需要用到stack1,pop方法必须加入辅助栈stack2。pop方法调用时,首先将stack1中的元素压入到stack2中,然后弹出stack2栈原创 2020-06-25 01:38:55 · 154 阅读 · 0 评论 -
04 图解剑指Offer 重建二叉树 Java题解
04 剑指Offer 重建二叉树 Java题解04 剑指Offer 重建二叉树 Java题解题目链接题目描述题解:图解:代码:复杂度04 剑指Offer 重建二叉树 Java题解题目链接题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。题解:思路:二叉树问题 要用分治法。将重建二叉树分成重建左子树,右子树原创 2020-06-24 20:31:35 · 204 阅读 · 0 评论 -
03 图解剑指Offer 从尾到头打印链表 Java题解
03 从尾到头打印链表 Java题解03 从尾到头打印链表 Java题解题目链接题目描述题解:图解:代码:复杂度03 从尾到头打印链表 Java题解题目链接题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。题解:方法一://双列表1.创建两个ArrayList list list12.头节点为null直接返回list3.当ListNode不为null时while循环遍历链表,每一次循环list1添加链表节点的值,同时ListNode的next指向下一个节点。4.for原创 2020-06-24 00:06:02 · 155 阅读 · 1 评论 -
02 图解剑指Offer 替换空格 Java题解
剑指Offer 01 二维数组中的查找 Java题解02 剑指Offer 替换空格 Java题解题目链接题目描述题解:图解:代码:复杂度02 剑指Offer 替换空格 Java题解题目链接题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题解:1.将StringBuffer类型的字符串转换成字符数组2.将str清空3.遍历字符数组取出单个字符比较是不是空格4.如果是空格str原创 2020-06-23 21:55:18 · 313 阅读 · 0 评论 -
01 图解剑指Offer 二维数组中的查找 Java题解
这里写自定义目录标题剑指Offer 01 二维数组中的查找 Java题解剑指Offer 01 二维数组中的查找 Java题解public class Solution { public boolean Find(int target, int [][] array) { int row = 0; int col = array[0].length - 1; while(row < array.length &&原创 2020-06-23 20:44:14 · 180 阅读 · 0 评论