剑指Offer
_仰望月空
这个作者很懒,什么都没留下…
展开
-
【剑指offer】矩阵覆盖
题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解决方案:可以考虑用递归,每次都有两种方法去覆盖大矩形,第一种可以竖着覆盖,那么每次覆盖2个矩形,第二种可以横着覆盖,那么每次肯定会覆盖4个矩形,因为上面用横着覆盖,下面的2个矩形肯定得横着放。可以推得表达式:f(n) = f(n-1原创 2018-01-24 10:49:21 · 257 阅读 · 0 评论 -
【剑指offer】二进制中1的个数
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题方案:for(int i=0; i<32; i++){ t = (n & 0x80000000 >>> i) >>> (31-i); if(t > 0) totalOf1++; }拆分一下这段代码,要理解这个移位输出的问题还需要理解的以下内容:* 0x80000000是数的原创 2018-01-25 15:06:06 · 232 阅读 · 0 评论 -
【剑指offer】数值的整数次幂(快速幂)
题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题方案:第一种方案:最简单的方法就是使用Math类的.pow方法Math.pow() static double pow(double a, double b) Returns the value of t原创 2018-01-25 22:28:35 · 540 阅读 · 0 评论 -
【剑指offer】调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题方案:数组的优点是查询很快速,但是删除节点和添加节点很复杂,必须要重新复制到另一个数组。在本题中调整数组顺序肯定是要重新复制到另一个数组中,我的方法是通过头指针和尾指针的方式,遍历数组两次,第一原创 2018-01-26 20:22:20 · 211 阅读 · 0 评论 -
【剑指offer】链表中倒数第K个节点
题目描述:输入一个链表,输出该链表中倒数第k个节点。解题方案:让链表从头开始走到尾,每移动一步,就让k的值减1。①假设链表为1-2-3,k=4,链表根本不存在倒数第4个节点。走到的节点为:1-2-3k的变化为:3 2 1②假设链表为1-2-3,k=3,链表的倒数第3个节点是3走到的节点为:1-2-3k的变化为:2 1 0③假设链表为1-2-3,k=2,链表的倒数第2个节点是2走到的节点为:1-2-...原创 2018-02-14 10:39:39 · 197 阅读 · 0 评论 -
【剑指offer】合并两个有序的链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题方案:1、两个当链表都为空时,或者其中一个为空时,只需要返回另一个链表的头节点就可以了;2、两个链表都不为空,则通过比较两个链表头结点的值,让小的那个作为合并之后的头节点head。后面的所有操作都是往这个链表中添加节点。设两个链表为list1和list2,从头部开始一起遍历,比较每次遍历到的两...原创 2018-03-17 21:08:22 · 193 阅读 · 0 评论 -
【剑指offer】判断B是不是A的子树
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题方案:看代码,全都注释了。代码:public class HasSubtree { public static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public...原创 2018-04-02 21:00:55 · 1450 阅读 · 0 评论