![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer-java实现
水瓶座程序猿纳兰
阻碍自己前进的,主要还是懒.....
展开
-
剑指offer_10 矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路: 对于矩形的覆盖,2*n大小的矩形,如果第一个小矩形竖着放,那么右边还有n-1个空间来安排放置小矩形;如果第一个小矩形横着放,那么它的下面一定是横着放到,而右边还有n-2个空间安排小矩形的放置。依次内推: fn=f(n-1)+f(n-2); 其中,f原创 2017-08-25 09:31:23 · 192 阅读 · 0 评论 -
剑指offer_2 替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路: 第一种:用StringBuffer,一个字符一个字符放入,如果碰到空格,直接放入%20;最后toString输出; 第二种:用String的replaceAll函数实现替换。 代码: 第一种写法public String原创 2017-08-24 09:52:15 · 151 阅读 · 0 评论 -
剑指offer_9 变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路: 没有明确的线索,采用数学归纳法: fn表示跳上n级台阶的方法数; f1=1,f2=2,f3=1+1+2=4; f4=1+3+2+1+1=8(一级一级有1种,一级两级有3种,一级三级有2种,两级两级有1种,四级的有1种,一共是8种) …. 可以发现,fn=2^(原创 2017-08-24 13:11:08 · 196 阅读 · 0 评论 -
剑指offer_8 跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法思路: 由题可知,青蛙跳台阶,跳上n阶,可以一阶一阶的跳,也可以两阶两阶的跳,还可以交叉来。 如果函数f(n)表示跳到n阶的方法,那么如果最后一次跳一阶,则前面有f(n-1)种,如果最后是跳2阶,则前面有f(n-2)种,因此f(n)=f(n-1)+f(n-2);依次类推,f1=1,f2=2;f3=原创 2017-08-24 13:00:12 · 252 阅读 · 0 评论 -
剑指offer_7 斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39思路: 斐波那契数列的特点是: f1=1,f2=1,f3=f1+f2; 代码public class Test { public int Fibonacci(int n) { //f1=1,f2=1,f3=f1+f2 if(n==0)原创 2017-08-24 12:52:33 · 184 阅读 · 0 评论 -
剑指offer_6 旋转数组最小的数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路: 虽然题目提到了旋转数组,但其实真实目的还是寻找数组中的最小值。 我们知道查询方法共有五种,除顺序查找原创 2017-08-24 12:02:40 · 192 阅读 · 0 评论 -
剑指offer_5 用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { } public int po原创 2017-08-24 10:43:24 · 150 阅读 · 0 评论 -
剑指offer_4 重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 /** * Definition for binary tree * public class TreeNode { * int原创 2017-08-24 10:39:17 · 200 阅读 · 0 评论 -
剑指offer_1 二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路: 由于数组从左到右递增,从上到下递增,可以从最右上角入手,如果等于该目标数,则返回true;如果大于目标数,则j–,目标数可能在其左边,如果小于目标数,则i++,目标数可能在其下方。代码:public class S原创 2017-08-24 09:42:53 · 190 阅读 · 0 评论 -
剑指offer_11 二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:首先想到的是和1与然后右移,但容易出现死循环,比如说负数。右移如果是无符号整数,则右移几位左边补几个0,如果是有符号整数,如果为正数,则右移几位就补几个0,;如果为负数,则右移几位左边就补几个1;因此右移不可取;如果是左移的话,不输入n,对n的最低位进行判断,flag=1, n原创 2017-08-25 09:31:39 · 211 阅读 · 0 评论 -
剑指offer_3 从尾到头打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值。 /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } *原创 2017-08-24 10:06:30 · 134 阅读 · 0 评论