剑指offer
努力LT
这个作者很懒,什么都没留下…
展开
-
剑指:字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 思路: 回溯法: 1.将A(i=0)与后面的每一个字符(j=i,i+1,,,length-1)交换,for循环 2.首先A和A交换,swap(c,i,j);A不动,再将B(i=1)与后面的每一个交换,直到...原创 2019-04-03 22:23:58 · 70 阅读 · 0 评论 -
剑指:重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: 前序:根左右,中序:左根右 题中例子:前序遍历1为根,中序遍历的4,7,2即为左子树,5,3,8,6即为右子树 左子树前序遍历为2,4...原创 2019-04-01 21:55:47 · 75 阅读 · 0 评论 -
剑指:从尾到头打印链表
题目描述 输入一个链表,反转链表后,输出新链表的表头。 思路: 1.从头到尾遍历一遍链表,并将后面的节点移到最前面 package number6; public class Solution1 {//从尾到头打印链表 public ListNode ReverseList(ListNode head) { if(head == null || head.next =...原创 2019-04-01 21:25:19 · 76 阅读 · 0 评论 -
剑指:数组中的重复数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 思路: 1.新建长度为n的数组,因为数组中数字的范围在0到n-1,因此可以以数组中的数为新数组的下标,出现次数为该下...原创 2019-04-01 20:30:25 · 87 阅读 · 0 评论 -
剑指:二叉树中和为某一值的路径
题目描述: 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 思路: 目标值减去根节点的值得到新的目标值,再对左子树和右子树查找和为新的目标值的路径,采用递归。 结束条件:节点为空说明一直遍历完都没有找到。 注意: 当遍历完后没有找到...原创 2019-03-27 20:13:05 · 106 阅读 · 0 评论 -
剑指:正则表达式匹配
题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 思路: 例子一开始都没看懂,仔细看了之后才发现怎么回事。。。 字符串"aaa"与模式...原创 2019-04-04 12:17:46 · 271 阅读 · 0 评论 -
剑指:字符串转换成整数
题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。 思路: 逐位判断,注意: 1.首位是否是符号位;2.字符'1'对应的数字是'1' - '0';3.考虑溢出。 public class Solution { ...原创 2019-04-04 09:50:51 · 86 阅读 · 0 评论 -
剑指:翻转单词顺序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 思路: 方法1....原创 2019-04-04 00:30:15 · 66 阅读 · 0 评论 -
剑指:左旋转字符串
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 思路: 方法1.先翻转n前部分,再翻转n后部分,最后整体翻转 public class ...原创 2019-04-03 23:25:37 · 71 阅读 · 0 评论 -
剑指:第一个只出现一次的字符
题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写) 思路: 1.使用hashMap,键值对key存储字符,value存储出现次数。先遍历字符串,将字符存储到hashMap中 2.再遍历一遍字符串,如果hashMap中对应字符串的value值为1,即只出现一次,返回字符串遍...原创 2019-04-03 22:54:29 · 71 阅读 · 0 评论 -
剑指:替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路: 1.声明一个StringBuffer result = new StringBuffer();用来表示最后的结果。 2.从头到尾遍历输入的字符串str 3.当遍历到的字符s = str.charAt(i)为空格:...原创 2019-04-03 22:42:08 · 77 阅读 · 0 评论 -
剑指:二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路: 中序遍历:左根右。给定节点是子树的根节点,该节点的左子树不用考虑,已经遍历过了,只需要考虑其右子树和父节点 1.给定节点的右子树不为空,返回右子树的最左节点; 2.给定节点的右子树为空,会出现两种情况: 给定节点是其父节点的左节点,那...原创 2019-04-08 11:35:49 · 79 阅读 · 0 评论