剑指offer
大泽上的扶桑树
做三四月的事,在八九月自有答案。
展开
-
面试题9-1:斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 时间限制:1秒 空间限制:32768K 思路 方法1:递归法,系统会让一个超大的n来让Stack Overflow,所以递归就不考虑了 方法2:迭代法,用f1和fn保存计算过程中的结果,并复用起来代码 运行时间:10 ms 占用内存:8280Kpublic class Solutio原创 2017-08-18 20:47:07 · 215 阅读 · 0 评论 -
面试题9-2:跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 时间限制:1秒 空间限制:32768K 知识点 循环递归思路 总结规律:f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5。由此得出f(n) = f(n-1) + f(n-2),但是为什么会出现这样的规律呢?假设现在6个台阶,我们可以从第5跳一步到6,这样的话有多少原创 2017-08-19 13:37:21 · 239 阅读 · 0 评论 -
面试题9-3:变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 时间限制:1秒 空间限制:32768K 知识点 循环递归思路 总结规律: f(1) = 1 f(2) = f(2-1) + f(2-2) =2*f(1) //f(2-2) =1=f(1)表示2阶一次跳2阶的次数。 f(3) = f(3-1) + f(3-2)原创 2017-08-19 14:36:15 · 183 阅读 · 0 评论 -
面试题4:替换空格
题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 时间限制:1秒 空间限制:32768K知识点:字符串思路:Java代码实现: 第一种: 运行时间: 17 ms 占用内存:8660K public class Solution { public String repla原创 2017-08-11 21:46:37 · 149 阅读 · 0 评论 -
面试题3:二维数组中的查找
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 时间限制:1秒 空间限制:32768K思路: 矩阵是有序的,从左下角来看,向上数字递减,向右数字递增。因此从左下角开始查找,当要查找数字比左下角数字大时,右移。 要查找数字比左下角数字小时,上移。代码实现: 运原创 2017-08-11 21:14:18 · 179 阅读 · 0 评论 -
面试题5-从头到尾打印链表
题目描述 输入一个链表,从尾到头打印链表每个节点的值。 时间限制:1秒 空间限制:32768K 本题知识点: 链表 思路1 递归,实现链表从尾到头插入。代码 语言:Java 运行时间: 16 ms 占用内存:8320K/*** public class ListNode {* int val;* ListNode next = nul...原创 2017-08-13 21:38:39 · 178 阅读 · 0 评论 -
面试题9-4:矩形覆盖
热度指数:96595 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 时间限制:1秒 空间限制:32768K 知识点 循环与递归思路 同跳台阶,斐波那契数列代码(java) 运行时间: 12 ms 占用内存:8408K public class Solution { public int原创 2017-08-20 20:54:26 · 286 阅读 · 0 评论 -
面试题47:不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不准用+、-、×、÷四则运算符号。思路将十进制加法分为三步:1、各位相加,不进位。2、计算进位。3、将前两个结果加起来。将十进制加法转为二进制加法,结果也是三步走。1、各位相加,不进位。发现0加0、1加1的结果都是0,0加1、1加0的结果为1。这和异或一致,因此用异或代替。2、计算进位。只有1加1会出现进...原创 2018-04-04 10:58:08 · 106 阅读 · 0 评论 -
面试题10:二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 时间限制:1秒 空间限制:32768K 知识点 位运算思路 1、先判断整数二进制表示中最右边一位是不是1。接着把输入的整数右移一位,此时原来处于从右边数起的第二位被移到最右边了,再判断是不是1。这样每次移动一位直到整个整数变成0 为止。现在的问题变成怎么判断一个整数的最右边是不是1了。这很简单,只要把整数和1做位与运原创 2017-08-23 21:31:20 · 212 阅读 · 0 评论