剑指offer--面试题9
题目一:求斐波那契数列第n项
自己所写代码如下:
#include "stdafx.h"
#include<iostream> long Fibonacci(unsigned int N)
{
long F0 = ;
long F1 = ;
if(N == )
return F0;
else if(N == )
return F1;
else
{
int n = ;
while(n <= N)
{
F0 = F0 + F1;
F1 = F0 + F1;
n += ;
}
return (N % == )? F0 : F1;
}
}
int main()
{
int N = ;
for(int i=; i<=N; i++)
{
long FValue = Fibonacci(i);
std::cout<<FValue<<std::endl;
}
return ;
}
虽然知道可以用递归实现,但实际写代码却有些生疏,关键是对递归不是很熟练。。。
参考作者代码,基于递归的实现如下:
long Fibonacci(unsigned int n)
{
int results[] = {,};
//递归终止条件
if(n < )
return results[n]; return Fibonacci(n-) + Fibonacci(n-); }
递归代码相当简洁!但正如书中所说,用递归求解斐波那契数列的第n项,会由于有很多重复的子问题求解,比如求解f(10)时,会求解两次f(8),因而造成计算复杂度随着n的增大而急剧增加!因此,该题用递归解并不是一种好的选择!时间复杂度:O(2_^n),即以n为指数的增长。
作者所写基于循环的实现如下:(很规范)
long Fibonacci(unsigned int n)
{
int results[] = {,}; if(n < )
return results[n]; long Fib_0 = results[];
long Fib_1 = results[];
long Fib_i;
for(int i=; i <= n; i++)
{
Fib_i = Fib_0 + Fib_1;
Fib_0 = Fib_1;
Fib_1 = Fib_i;
} return Fib_i;
}
和自己所写的代码,思想一致!时间复杂度:O(n)。
该题时间复杂度可以达到O(logn),只做了解了。
题目二:(关于斐波那契数列的应用)
青蛙跳台阶,每次只能跳1个台阶或者2个台阶,则问青蛙若要跳n个台阶共有多少种跳法?
分析:该题的思路不太好想。。。
首先要想到以n为变量,n个台阶的跳法共有f(n)种,那么:
分析一:到第n-1阶后,再跳一步即到第n阶,此时的跳法为f(n-1);
到第n-2阶后,再跳一个两步或者连续跳一步即可到第n阶,但此时注意到后者包含在上一步中,所以此时的跳法为f(n-2),而非2*f(n-2)。
分析二:以开始跳为分界点更好些。
第一跳若为跳一步,则剩下的n-1台阶的跳法为f(n-1);
第一跳若为跳一个两步,则剩下的n-2台阶的跳法为f(n-2);
避免 对分析一中特殊情况的忽略。
综上,n个台阶的跳法f(n)=f(n-1)+f(n-2)为斐波那契数列!!!
剑指offer--面试题9的更多相关文章
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
随机推荐
- [老老实实学WCF] 第九篇 消息通信模式(上) 请求应答与单向
老老实实学WCF 第九篇 消息通信模式(上) 请求应答与单向 通过前两篇的学习,我们了解了服务模型的一些特性如会话和实例化,今天我们来进一步学习服务模型的另一个重要特性:消息通信模式. WCF的服务端 ...
- 20150410---GridView分页(备忘)
GridView自带分页功能,但是模板单一,试用较少数据. AllowPaging="true" PageSize="10" 启用分页设置.默认每页数量为10 ...
- struts2中访问servlet API
Struts2中的Action没有与任何Servlet API耦合,,但对于WEB应用的控制器而言,不访问Servlet API几乎是不可能的,例如需要跟踪HTTP Session状态等.Struts ...
- 走出 null 就是空值的误区,以及变量赋值原理
先放一张图片作为引入: 这里我用了一个示意图作为讲解: 平时,我们写的变量为什么能在我们调用它的时候就能被我们拿到所用,跟存钱罐一样,你往里面存一元大洋,它里面就有一元大洋,那么我们的变量在被我们创建 ...
- 淘宝店铺应用android源码
一个淘宝店铺的app 界面模仿蘑菇街 完结版很多朋友想知道web端 我发上来 是用thinkphp框架 懂的同学拿去研究 ,之前做的前台 现在基本上不能用 就看个后台就好了 也比较简单 我放上来 大家 ...
- 转:关于JAVA多线程同步
转:http://lanvis.blog.163.com/blog/static/26982162009798422547/ 因为需要,最近关注了一下JAVA多线程同步问题.JAVA多线程同步主要依赖 ...
- 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配
今天在使用plsql通过odbc导入excel数据时发生了一个错误,截图如下: 错误提示为:驱动程序和应用程序之间的体系结构不匹配. 后来百度了一下,得出答案.系统是win10 64位.excel驱动 ...
- 使用winform来递归实现资源管理器
这里主要是对TreeView控件的学习 所使用到的方法: string path=@"E:\歌词"; //获得指定文件夹下所有文件夹的名称,这是带路径的,如:E:\歌词\11111 ...
- webview的弹性布局之rem,em
webview页面的自适应一般有两种方法,即一是JS的计算方法,二是通过css的media设置分档方式.在此主要介绍css的方式. html { font-size: 16px; } @media o ...
- 伴随ListView、RecyclerView、ScrollView滚动滑入滑出小图标--第三方开源--FloatingActionButton
FloatingActionButton在github上的项目主页是:https://github.com/makovkastar/FloatingActionButton 它的依赖包NineOldA ...