![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
Mr_Curious_
自律、自律、自律、自律。要时刻保持奋发向上的精神面貌!!!
展开
-
根节点到某节点的路径或者到所有子节点的路径
肯定前序遍历 /**查找根节点到某一节点的路径*/ void findPath(TreeNode root, TreeNode target, ArrayList<TreeNode> list){ if(root == null) return; list.add(root); if(root...原创 2018-08-06 19:43:45 · 2669 阅读 · 0 评论 -
49 把字符串转换为整数(编码习惯)
题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入复制 +2147483647 1a33 输出复制 2147483647 0 首先,判断符号位。...原创 2018-05-28 11:24:25 · 494 阅读 · 0 评论 -
47 不用加减乘除做加法
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。public class Solution { public int Add(int num1,int num2) { if(num1 == 0) return num2; int a = (num1 & num2) <&l...原创 2018-05-28 11:08:21 · 125 阅读 · 0 评论 -
46 求1+2+3+...+n >>能对int类型使用
题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。这道题的基本做法有三种: (1)公式:n(n+1) / 2 ,也可以拆分 (2)递归,肯定需要if来做终结条件 (3)循环 但是(2)(3)在这里肯定不能用了。公式如果把括号拆开,除号改为右移的话,还可以使用。 注意:>>能...原创 2018-05-28 10:35:30 · 120 阅读 · 0 评论 -
45 孩子们的游戏(圆圈中最后剩下的数——还差一种递归_约瑟夫环)
题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数….这样下去….直到剩下...原创 2018-05-28 10:05:14 · 184 阅读 · 0 评论 -
44 扑克牌顺子
题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…..LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。...原创 2018-05-27 16:21:18 · 140 阅读 · 0 评论 -
42 反转单词顺序(任意子串的反转函数——字符数组转换为字符串)
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 关键是写一个能够将任...原创 2018-05-27 15:42:29 · 276 阅读 · 0 评论 -
42 左旋转字符串
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!public class Solution { public String Lef...原创 2018-05-27 14:43:31 · 109 阅读 · 0 评论 -
41 和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序...原创 2018-05-27 11:38:18 · 104 阅读 · 0 评论 -
33 把数组排成最小的数(重用了全排列或者重写sort函数,比较器(差点)比较的是str1+str2 与 str2+str1)
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。1、想法很简单,求这三个数做一个全排列,然后将其最小数输出即可!import java.util.*;public class Solution { public void swap(int ...原创 2018-05-07 22:49:30 · 215 阅读 · 0 评论 -
32 从1到n整数中1出现的次数(未完)
题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。1、最笨的方法:对于每个数进行1的个数的统计:public class Solution { ...原创 2018-05-07 21:30:33 · 84 阅读 · 0 评论 -
21 包含min函数的栈
设置一个辅助栈,每当在栈中放入一个元素的时候,同时也在辅助栈中放入当前的最小值; 每当出栈的时候,同时将当前值和当前最小值出栈,代码如下:import java.util.Stack;public class Solution { Stack<Integer> stack = new Stack(); Stack<Integer> minSt...原创 2018-04-29 22:37:16 · 94 阅读 · 0 评论 -
20 顺时针打印数组
import java.util.ArrayList;public class Solution { public void print(int [][] matrix,int rows,int cols,int k, ArrayList<Integer> arr) { int endX = cols-1-k;...原创 2018-04-29 22:07:54 · 143 阅读 · 0 评论 -
19 二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 ...原创 2018-04-29 19:46:08 · 112 阅读 · 0 评论 -
51 数组中重复数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 1、使用一个Hash表import java.util.*;public class Solution { ...原创 2018-05-29 09:46:16 · 136 阅读 · 0 评论 -
52 构建乘积数组
题目描述 给定一个数组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]。不能使用除法。最笨的方法: 如果能用除法的话,直接让A中所有数的乘积除以第i个数即可。不能的话就来次循环import java.util.ArrayList;public class Solution { ...原创 2018-05-29 10:16:25 · 146 阅读 · 0 评论 -
53 正则表达式匹配(略难)
题目描述 请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配注意了:必须先判断“ * ”的情况,然后再判断“ . ”的情况。==》案例:“aa”,“a*...原创 2018-05-29 15:12:34 · 260 阅读 · 0 评论 -
16 反转链表
输入一个链表,反转链表后,输出新链表的表头。/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode Rever...原创 2018-08-10 09:51:57 · 147 阅读 · 0 评论 -
65 滑动窗口的最大值
题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,6],2,...原创 2018-06-01 11:02:21 · 108 阅读 · 0 评论 -
64 数据流中的中位数
题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 最简单的方法,使用工具类对其进行排序,然后取其中位数即可。import java.util.*;public class Solution { ArrayList<Intege...原创 2018-05-31 17:09:04 · 189 阅读 · 0 评论 -
63 二叉搜索树中的第k个节点(中序遍历递归_有返回值-无返回值;Java对象作为参数)
题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。一开始,我打算使用count计数的方法,当count的数等于k的时候,就是要返回的结果。很容易就写出来了,但是总是报错。怎么回事呢? 发现改为数组就对了,前面两种有点懵。import java.util.*;public cla...原创 2018-05-31 16:48:58 · 288 阅读 · 0 评论 -
62 序列化和反序列化 (反序列化的字符串构造一个二叉树——传入一个null节点 _层次遍历)
题目描述 请实现两个函数,分别用来序列化和反序列化二叉树import java.util.*;public class Solution { StringBuilder str = new StringBuilder(""); String Serialize(TreeNode root) { if(root == null) ...原创 2018-05-31 16:04:13 · 319 阅读 · 0 评论 -
101. Symmetric Tree(59 对称的二叉树)
1、题意: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1 / \ 2 2 / \ / \3 4 4...原创 2018-03-19 22:21:10 · 152 阅读 · 0 评论 -
60 把二叉树打印成多行(注意先后顺序)
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer&原创 2018-05-31 10:34:39 · 85 阅读 · 0 评论 -
61 按之字型顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。第一行,按顺序打印;第二行,先放入一个栈中,然后取出再打印;第三行按顺序打印,如此继续;需要一个标记来判断是不是使用栈来存储(为了反序)。基础是按层遍历,使用last和nlast来判断是不是要换行了。public class Solut...原创 2018-05-31 10:23:14 · 112 阅读 · 0 评论 -
59 对称的二叉树 《剑指offer》 101. 对称二叉树《LeetCode》
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...原创 2018-05-31 09:21:25 · 143 阅读 · 0 评论 -
57 删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5首先一点,只要.next了,一定要判断当前节点是不是null; 如果开始的几个节点是一样的;;; 如果一样的节点数量超过两个;public原创 2018-05-30 15:23:26 · 119 阅读 · 0 评论 -
56 链表中环的入口节点
题目描述 一个链表中包含环,请找出该链表的环的入口结点。 使用hashimport java.util.*;public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { HashSet<ListNode> set = new HashSet(); ...原创 2018-05-30 11:48:39 · 194 阅读 · 2 评论 -
55 字符流中的第一个不重复的字符 (还没看其他方法)
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。import java.util.*;public class Solution { Has...原创 2018-05-30 11:20:04 · 107 阅读 · 0 评论 -
54 表示数值的字符串
题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。这道题不难,但是超级麻烦。这个和正则表达式一样,肯定得用递归的手段。 (1)首先判断第一位是不是符号位,在一般的数中,符号位不能出现两...原创 2018-05-30 10:35:39 · 189 阅读 · 0 评论 -
18 树的子结构(树递归 和437有点像)
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)通过一种遍历方式获得该树的字符串,再判断一个字符串是不是另一个字符串的子串!代码如下:public class Solution { public String preOrder(String str,TreeNode root){ if(root != null){ ...原创 2018-04-29 17:33:55 · 128 阅读 · 0 评论 -
17 合并两个排序的列表
一般的写法:public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { ListNode head = new ListNode(-1); ListNode p = head; while(list1 != null && l...原创 2018-04-29 16:43:56 · 187 阅读 · 0 评论 -
15 链表中倒数第k个结点
先遍历一遍链表,得到总的结点数,再找到倒数第k个几点就对应数值即可。边界条件为0.public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(k == 0) return null; int count = 0; L...原创 2018-04-29 15:24:22 · 90 阅读 · 0 评论 -
58 二叉树的下一个节点
/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; }}*/p...原创 2018-04-24 22:32:07 · 109 阅读 · 0 评论 -
6 重建二叉树
1、递归的写法:public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int plow,int phigh,int [] in,int ilow,int ihigh) { if(plow == phigh) return new TreeNode(pr...原创 2018-04-24 20:59:09 · 112 阅读 · 0 评论 -
7 使用两个栈实现队列
import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void pu原创 2018-04-24 20:47:47 · 87 阅读 · 0 评论 -
35 第一个只出现一次的字符
题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置public class Solution { public int FirstNotRepeatingChar(String str) { int[] arr = new int[62]; for(int i=0;i&l...原创 2018-05-08 22:59:05 · 82 阅读 · 0 评论 -
输入一个链表,从尾到头打印链表每个节点的值
1、使用栈:import java.util.ArrayList;import java.util.Stack;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> ar...原创 2018-04-23 20:57:19 · 453 阅读 · 0 评论 -
2 字符串替换
public class Solution { public String replaceSpace(StringBuffer str) { int len = str.length(); int count = 0; for(int i=0;i&lt;len;i++){ if(str.charAt(i) == ' '...原创 2018-04-23 20:29:08 · 115 阅读 · 0 评论 -
27 二叉搜索树与双向链表(BG面试栽了的题——遍历递归形式需要返回值)
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 1、/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {...原创 2018-04-30 17:34:55 · 182 阅读 · 0 评论