
剑指Offer
针对剑指题目所有题目解析,并在牛客网OJ上AC了所有收录的剑指offer上的题目
ArvinYL
要么热爱,要么离开
展开
-
【剑指offer】从尾到头打印链表
题目链接题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解题思路:将链表按照顺序放在栈中,利用栈的特性取出即为丛尾到头/*** @author: hyl* @date: 2019/08/15**/public class Que3 { public class ListNode { int val; ListNod...原创 2019-08-19 21:27:33 · 188 阅读 · 0 评论 -
【剑指Offer】孩子们的游戏(圆圈中最后剩下的数)
题目链接题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直...原创 2019-09-19 21:50:21 · 222 阅读 · 0 评论 -
【剑指Offer】求1+2+3+...+n
题目链接题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路:解题思路一:题目说不能使用for、while,第一反应就是递归果然,水题一道 代码:解法一:/** * @author: hyl * @date: 2019/08/15 **/public ...原创 2019-09-21 21:19:07 · 135 阅读 · 0 评论 -
【剑指Offer】扑克牌顺子
题目链接题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张 ^ _ ^ )…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为...原创 2019-09-22 11:40:31 · 183 阅读 · 0 评论 -
【剑指Offer】把字符串转换成整数
题目链接题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入 +2147483647...原创 2019-09-22 15:42:38 · 165 阅读 · 0 评论 -
【剑指Offer】构建乘积数组
题目链接题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0] * A[1]*…*A[i-1] * A[i+1] *…*A[n-1]。不能使用除法。解题思路:题目就是给我们一个数组,让我们计算出数组B,B[i] = A[0] * A[1] * … * A[i-1]*A[i+1] * A[N-1]解题思路一:直接for...原创 2019-09-22 21:30:44 · 185 阅读 · 0 评论 -
【剑指Offer】表示数值的字符串
题目链接题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。解题思路:根据E和小数点以及正负出现情况进行判断不能同时存在两个e;e后面一定要接数字第二次出现±符号,则必须紧接在e之...原创 2019-09-22 21:50:19 · 145 阅读 · 0 评论 -
【剑指Offer】正则表达式匹配
题目链接题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配解题思路: 我们需要搞清 . 和 * 的匹配规则,通过题目可以知道,. 可以匹配任...原创 2019-09-23 10:06:45 · 141 阅读 · 0 评论 -
【剑指Offer】链表中环的入口结点
题目链接题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解题思路:第一步,找环中相汇点。分别用p1,p2指向链表头部,p1每次走一步,p2每次走二步,直到p1==p2找到在环中的相汇点。第二步,找环的入口。当p1==p2时,p2所经过节点数为2x,p1所经过节点数为x,设环中有n个节点,p2比p1多走一圈有2x=n+x; n=x;可以看出p1实际...原创 2019-09-23 10:39:53 · 228 阅读 · 0 评论 -
【剑指Offer】删除链表中重复的结点
题目链接题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题思路:/* public class ListNode { int val; ListNode next = null; ...原创 2019-09-23 10:54:53 · 112 阅读 · 0 评论 -
【剑指Offer】二叉树的下一个结点
题目链接题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解题思路:若该节点存在右子数,如传入的是A,则下一个节点为右子数最左子节点(即节点F)若不存在右子数找到第一个当前节点是父节点的左孩子的节点/** * @author: hyl * @date: 2019/0...原创 2019-09-23 13:54:14 · 164 阅读 · 0 评论 -
【剑指Offer】按之字形顺序打印二叉树
题目链接题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路:若该节点存在右子数,如传入的是A,则下一个节点为右子数最左子节点(即节点F)若不存在右子数找到第一个当前节点是父节点的左孩子的节点/** * @author: hyl * @date: 2...原创 2019-09-23 18:00:29 · 150 阅读 · 0 评论 -
【剑指Offer】把二叉树打印成多行
题目链接题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解题思路:将每层的节点放入队列中将当前节点打印出来的时候,同时放入左子节点和右子节点/** * @author: hyl * @date: 2019/08/15 **/public class Que60 { public static class TreeNode { ...原创 2019-09-23 18:07:26 · 238 阅读 · 0 评论 -
【剑指Offer】序列化二叉树
题目链接题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种...原创 2019-09-23 20:25:55 · 152 阅读 · 0 评论 -
【剑指Offer】二叉搜索树的第k个结点
题目链接题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。解题思路:二叉搜索树按照中序遍历的顺序打印出来正好就是排序好的顺序按照中序遍历顺序找到第k个结点就是结果/** * @author: hyl * @date: 2019/08/15 **/public class Que62...原创 2019-09-23 20:44:32 · 160 阅读 · 0 评论 -
【剑指Offer】滑动窗口的最大值
题目链接题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,...原创 2019-09-25 19:29:16 · 172 阅读 · 0 评论 -
【剑指Offer】矩阵中的路径
题目链接题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一...原创 2019-09-25 19:52:12 · 269 阅读 · 0 评论 -
【剑指Offer】机器人的运动范围
题目链接题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思路:通过回溯遍历,在...原创 2019-09-26 09:41:35 · 144 阅读 · 0 评论 -
【剑指Offer】左旋转字符串
题目链接题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路:左移K位就是将前K位放在字符串的最后 代码: /** * @...原创 2019-09-19 21:31:53 · 157 阅读 · 0 评论 -
【剑指Offer】和为S的连续正数序列
题目链接题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的...原创 2019-09-17 21:52:31 · 148 阅读 · 0 评论 -
【剑指Offer】平衡二叉树
题目链接题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路:平衡二叉树的性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。所有我们可以递归求每个节点是否符合即可 代码:/** * @author: hyl * @date: 2019/08...原创 2019-09-17 21:37:42 · 131 阅读 · 0 评论 -
【剑指offer】重建二叉树
题目链接题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路:例如:前序序列{1,2,4,7,3,5,6,8} = pre中序序列{4,7,2,1,5,3,8,6} = in根据前序...原创 2019-09-09 21:01:13 · 148 阅读 · 0 评论 -
【剑指Offer】跳台阶
题目链接题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路:对于两级台阶,可以有两种跳法,即1+1和2对于一级台阶,有一种跳法对于n级台阶,跳法有f(n) = f(n-1) + f(n-2),n >= 3 解法一:/*** @author: hyl* @date: 2019/08/...原创 2019-09-10 21:44:12 · 126 阅读 · 0 评论 -
【剑指Offer】变态跳台阶
题目链接题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路:这个题目和前面的跳台阶稍微有点不同,这个是可以每次跳1~n级,碰到这类问题,我们只管进行分析就可以跳1级,剩下n-1级,则剩下跳法是f(n-1)跳2级,剩下n-2级,则剩下跳法是f(n-2)所以f(n)=f(n-1)+f(n-2)+…+f(1),...原创 2019-09-10 22:08:16 · 166 阅读 · 0 评论 -
【剑指Offer】数值的整数次方
题目链接题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0解题思路:简单来说,题目就是求a的n次方。直接for循环暴力,复杂度O(N)可能会导致超时。我们可以想办法将复杂度降到O(LogN)。幂次exponent每次右移一位底数base每次都是乘以本身,幂次每次降低一半r...原创 2019-09-12 20:06:55 · 160 阅读 · 0 评论 -
【剑指Offer】链表中倒数第k个结点
题目链接题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路:将链表放在栈中,因为栈的特性是先进后出,所以依次取出K个即可import java.util.Stack;/** * @author: hyl * @date: 2019/08/15 **/public class Que14 { public class ListNode { i...原创 2019-09-12 20:16:01 · 205 阅读 · 0 评论 -
【剑指Offer】链表中倒数第k个结点
题目链接题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路:具体分析可以看这篇文章https://blog.youkuaiyun.com/qq_37888382/article/details/88089204代码地址:https://github.com/Han-YLun/jianzhiOffer/blob/master/Solution/src/Que15.java文章为阿伦...原创 2019-09-12 20:22:23 · 96 阅读 · 0 评论 -
【剑指Offer】合并两个排序的链表
题目链接题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路:两个指针分别挡在两个链表的起点,对比两个指针对应位置的值,将小的放在新链表中,同时后移,直到其中一个链表为空判断哪个链表不为空,将新链表的next指向该链表代码:/** * @author: hyl * @date: 2019/08/15 **/publ...原创 2019-09-12 20:46:17 · 233 阅读 · 0 评论 -
【剑指Offer】树的子结构
题目链接题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路:将两棵树的节点分别取出来放在list中,判断BList是否为AList的子集时间复杂度为O(N),空间复杂度为O(N)代码:import java.util.ArrayList;import java.util.List;/** * @author: hy...原创 2019-09-14 21:33:13 · 112 阅读 · 0 评论 -
【剑指Offer】栈的压入、弹出序列
题目链接题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路:将数组A放入栈中,放入之后与数组B进行判断如果相等,则弹出...原创 2019-09-14 21:44:43 · 202 阅读 · 0 评论 -
【剑指Offer】从上往下打印二叉树
题目链接题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路:依次将每个节点放入队列中从队列中依次取出节点并放在集合中,当节点左右子节点不为空,添加到队列中循环操作直至队列为空代码:/** * @author: hyl * @date: 2019/08/15 **/public class Que22 { public static cla...原创 2019-09-14 21:49:39 · 145 阅读 · 0 评论 -
【剑指Offer】二叉搜索树的后序遍历序列
题目链接题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路:后续遍历根节点总是在最后第一个大于根节点的即为右子数,再循环递归判断每一个节点是否符合二叉搜索树的性质对于非叶子节点,左子树小于根节点,右子树大于根节点代码:/** * @author: hyl * @date...原创 2019-09-15 21:29:10 · 154 阅读 · 0 评论 -
【剑指Offer】二叉树中和为某一值的路径
题目链接题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路:使用DFS进行遍历,如果符合,就添加到list集合中在退出当前层时,要将添加的数移除掉代码:/** * @author: hyl * @date: ...原创 2019-09-15 21:39:33 · 156 阅读 · 0 评论 -
【剑指Offer】二叉搜索树与双向链表
题目链接题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路:因为二叉搜索树的特点是非叶子节点左子树小于根节点,右子数大于根节点生成的排序的双向链表最开始的数是最小的,即为二叉搜索树叶子节点最左边的节点节点的左链表为左节点代码:/** * @author: hyl * @date: 2019/0...原创 2019-09-16 10:14:34 · 129 阅读 · 0 评论 -
【剑指Offer】字符串的排列
题目链接题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解题思路:对于字符串,先固定一个位置,将剩下的进行交换,每交换一次就生成一种组成,然后依次固定每次位置的字...原创 2019-09-16 21:13:25 · 103 阅读 · 0 评论 -
【剑指Offer】连续子数组的最大和
题目链接题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最...原创 2019-09-16 21:28:33 · 141 阅读 · 0 评论 -
【剑指Offer】丑数
题目链接题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路:按顺序把每个丑数放在数组中,求下一个丑数下一个丑数必定由有数组中的某一个丑数A * 2, B * 3, C * 5 的中的最小值得来。在数组中必定有一个丑数M2, 在它之前的...原创 2019-09-16 21:48:49 · 140 阅读 · 0 评论 -
【剑指Offer】二叉树的深度
题目链接题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路:求二叉树的最深深度,即求出左子树的高度和右子数的高度的最大者+1使用递归即可将问题一层层递归下去 代码:/** * @author: hyl * @date: 2019/08/15 **/public class Que3...原创 2019-09-17 21:33:16 · 110 阅读 · 0 评论 -
【剑指Offer】剪绳子
题目链接题目描述给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)...原创 2019-09-26 11:57:30 · 332 阅读 · 0 评论