随笔分类 -  剑指offer

摘要:解题思路 注意遍历结束的条件 问题描述 操作给定的二叉树,将其变换为源二叉树的镜像。 代码实现 阅读全文
posted @ 2018-03-07 22:52 休眠体 阅读(127) 评论(0) 推荐(0)
摘要:解题思路 对于树的子结构,首先注意空树不是任何树的子结构,所以我们要先解决root1或者root2为空的情况,其次在root1中查看有没有root2的根节点,如果存在root2的根节点则比较两棵树是否相同 问题描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子 阅读全文
posted @ 2018-03-07 22:11 休眠体 阅读(144) 评论(0) 推荐(0)
摘要:解题思路 由于小矩形的尺寸是2×1,所以有大矩形为2×number的存在,那么我们第一步就可以有两种处理方式: 第一步如果选择竖方向填充,那么该问题的规模就缩减为对于剩余的2×(number-1)的大矩形的填充。 如果,第一步如果选择横方向的填充,则第二排的前面两个小矩形也只能如此填充,那么该问题的 阅读全文
posted @ 2018-03-07 19:11 休眠体 阅读(126) 评论(0) 推荐(0)
摘要:解题思路 因为是排好序的所以我们可以让两个链表的数进行比较,用另外一个链表存储两个链表中较小的数,同时还应该注意链表为空的情况,以及比较过程中一方为空的情况。 问题描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 代码实现 阅读全文
posted @ 2018-03-07 18:50 休眠体 阅读(104) 评论(0) 推荐(0)
摘要:解题思路 根据链表的性质链表反转只能对每一个节点进行处理了,用三个节点标记当前节点、前节点、后节点,改变三者的链表关系,最后返回最后一个节点。注意在改变相互之间关系之前,要把后节点保存起来,也要注意循环的边界和返回的节点 问题描述 输入一个链表,反转链表后,输出链表的所有元素 输入一个链表,反转链表 阅读全文
posted @ 2018-03-07 11:06 休眠体 阅读(139) 评论(0) 推荐(0)
摘要:解题思路 为了能够只遍历一次就能找到倒数第k个节点,可以定义两个指针: (1)第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动; (2)从第k步开始,第二个指针也开始从链表的头指针开始遍历; (3)由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指 阅读全文
posted @ 2018-03-06 21:21 休眠体 阅读(444) 评论(0) 推荐(0)
摘要:解题思路 看到题目首先想到的是将排序的思想应用到这道题目上,但是这样不能保证奇数在偶数前面,并且相对位置不变;其次又想是不是可以都顺次遍历然后交换,可后来发现这样进行的次数多了会打乱偶数的相对位置;所以最后只好用最笨的方法,从前往后分别找到第一个偶数和第一个奇数,然后一个一个的挪动位置进行交换,这样 阅读全文
posted @ 2018-03-06 20:59 休眠体 阅读(136) 评论(0) 推荐(0)
摘要:解题思路 一开始看到这个题目会觉得很简单,但如果按照一开始的思路做下去就会发现思维有很多漏洞,同时效率也不会很高,需要注意的问题如下: 1.base是double类型,并且有可能为零,exponent为int类型,并且有可能为负数 2.对于double类型的数判断相等,得考虑误差 3.对于递归的执行 阅读全文
posted @ 2018-03-05 17:11 休眠体 阅读(130) 评论(0) 推荐(0)
摘要:解题思路 最开始觉得题目难在负数的补码如何求上面,但是..........自从知道了java当中有Integer.toBinaryString(n)方法,感觉瞬间就变得简单了 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 代码实现 阅读全文
posted @ 2018-03-04 22:11 休眠体 阅读(115) 评论(0) 推荐(0)
摘要:解题思路 1.由上题跳台阶思路得f(n) = f(n-1)+f(n-2)+f(n-3)+.....+f(n-n), 同时得f(n-1) = f(n-2) + f(n-3) + .... +f(n-n); 2.由1得f(n) = f(n-1)+f(n-1) = 2*f(n-1); 3.f(n-x)代表 阅读全文
posted @ 2018-01-25 14:16 休眠体 阅读(121) 评论(0) 推荐(0)
摘要:解题思路 1.一个台阶的情况下,只有一种跳法,JumpFloor(1) = 1; 2.两级台阶的情况下,可以一级一级的跳,也可以一次跳两级,JumpFloor(2) = 2; 3.三级台阶的情况下,可以由最后跳一次台阶得来,此时和JumpFloor(2)的情况相同,也可以由最后跳两次台阶得来,此时和 阅读全文
posted @ 2018-01-25 13:58 休眠体 阅读(146) 评论(0) 推荐(0)
摘要:解题思路 1.根据题目描述,有两种情况,一种是进行了旋转,一种是未进行旋转。 2.数组是非递减排序,所以也存在两种情况,一种是递增,一种是存在相等的情况 3.未进行旋转和数组中的数全部相等的情况中,最小数都为数组的第一个数。 4.进行了旋转并且为递增排序情况下,只有最小数比他的前一个数小,其他数都是 阅读全文
posted @ 2018-01-25 12:34 休眠体 阅读(126) 评论(0) 推荐(0)
摘要:解题思路 1.队列先进先出 2.栈先进后出 3.数据进两次栈,两次先进后出相当于先进先出 4.stack1负责实现队列的进功能,Stack2实现队列的出功能 5.push()功能,通过stack1入栈实现 6.pop()功能实现过程中,若Stack2不为空,则直接弹出,如为空则将stack1中的数输 阅读全文
posted @ 2018-01-25 11:08 休眠体 阅读(136) 评论(0) 推荐(0)
摘要:解题思路 1.前序数组中的第一个为二叉树的根节点 2.根节点在中序数组中把二叉树分为左右两个子二叉树 3.根据根节点创建新的节点 4.根据中序数组确定的两个子树,分别确定下一个根节点,并分别赋值给根节点的左右节点 5.根据中序数组获得的两个子树节点结合前序遍历递归确定每一个节点 题目描述 输入某二叉 阅读全文
posted @ 2018-01-22 21:00 休眠体 阅读(133) 评论(0) 推荐(0)
摘要:解题思路 逆序打印很容易想到要用栈 题目描述 输入一个链表,从尾到头打印链表每个节点的值。 代码实现 阅读全文
posted @ 2018-01-04 22:04 休眠体 阅读(109) 评论(0) 推荐(0)
摘要:解题思路 如果用递归会超时,所以改用数组存,或者直接输出,代码如下 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项 代码实现 用数组实现 阅读全文
posted @ 2018-01-03 22:57 休眠体 阅读(153) 评论(0) 推荐(0)
摘要:解题思路 1.用字符串代替空格,肯定不可以直接替换,又想要代码尽量简洁,所以创建一个新的字符串用于存储替换后的字符串 2.String可以直接在后面补充字符串 3.输入StringBuffer,用scanner.nextLine()和StringBuffer.append()函数,scanner.n 阅读全文
posted @ 2018-01-03 19:19 休眠体 阅读(120) 评论(0) 推荐(0)
摘要:今天刚开始刷剑指offer,比较简单的一个题竟然第一次没过。 主要原因在于:1、不能调试徒手撸代码,括号竟然写成了中文,这个问题再把代码copy到自己的eclipse上才发现的; 2、boolean类型最后要返回false 3、静态方法只能调用静态方法,所以主函数里面调用的方法要变成静态方法。静态方 阅读全文
posted @ 2017-12-13 21:51 休眠体 阅读(99) 评论(0) 推荐(0)