剑指offer
刷剑指offer题的一点心得体会,其中解法一均为自己想的解题思路,可能方法比较笨,但那是自己思考的结果。主要是做个记录,方便日后查阅
菜鸡一号
身边满是大佬的菜鸡
展开
-
对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 解法一: 第一种想法,生成一个二叉树镜像,然后比较原二叉树和二叉树镜像即可。这个肯定是没问题,但是有没有必要生成一个二叉树镜像那?因为原二叉树需要保留,不然就没有参照了。所以,涉及到新内存分配,这就会在内存分配和构建对象上花费大量的时间和空间,故转而寻求其他解法。 第二种想...原创 2018-11-26 19:34:26 · 97 阅读 · 0 评论 -
把字符串转换成
题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 示例1 输入 复制 +2147483647 1a33 输出 ...原创 2018-11-27 11:18:39 · 152 阅读 · 0 评论 -
二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解法一: 最开始我想的是穷举法。 假设有一颗满二叉树,考虑每一个节点的情况。结果发现太麻烦了,而且容易落情况。 转换思路:把中序遍历的结果存放在vector中,然后再遍历整个vector,从而获得结果 /* struct TreeLinkNode {...原创 2018-11-26 11:35:51 · 84 阅读 · 0 评论 -
不用加减乘除做加法
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 解法一: 对于这个题我先说一下我自己的思路吧。 看到题目,我脑袋里的第一个想法就是用异或(^),类似于全加器(计算机组成原理或者数电中的知识吧,忘了) 首先利用(num & 1)分别获取两个整数当前位的值, tmp1 = num1 & 1; tmp2 ...原创 2018-11-22 17:27:37 · 82 阅读 · 0 评论 -
扑克牌顺子
题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,...原创 2018-11-18 21:17:24 · 121 阅读 · 0 评论 -
翻转单词顺序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 看到这种题,想法...原创 2018-11-15 17:17:57 · 81 阅读 · 0 评论 -
和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。 在写解法之前,先思考一个问题,在存在多组和S的情况下,满足什么条件,输出两个数的乘积最小,结论是:在数组中,两个数字离的越远,其乘积就越小。 证明:在存在多组...原创 2018-11-14 20:02:04 · 61 阅读 · 0 评论 -
和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正...原创 2018-11-13 22:25:23 · 66 阅读 · 0 评论 -
按之字形顺序打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 解法一: 使用两个双端队列,一个当队列用(从左到右打印),一个当栈用(从右到左打印)。 大致思路如下: 定义两个双端队列的数据结构 deq_1, deq_2,相互初始化。 deq_1 中的元素的左右子树,按顺序进入 deq_2,然后 ...原创 2018-12-03 10:07:33 · 120 阅读 · 0 评论 -
删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解法一: 因为删除重复的结点是一种重复的操作,所以可以单独写个函数来实现它。(本来我想直接一个函数搞定的,但是思路有点乱,代码也很乱)原创 2018-12-02 21:52:57 · 87 阅读 · 0 评论 -
把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 解法一: 这个题和之字形打印很像,这里我们直接使用两个双端队列就好了deq_1, deq_2。 思路如下 根节点指针放入 que_1,根据 que_1中的元素,可以得到其对应的左右孩子,也就是下一行数据,存放入 que_2 仿照第一步, que_2中的元素的左右孩子,用 que_1来存放 交替执行第一、二步,直到...原创 2018-12-03 11:24:24 · 108 阅读 · 0 评论