原题链接:  http://oj.leetcode.com/problems/climbing-stairs/  
这道题目是求跑楼梯的可行解法数量。每一步可以爬一格或者两个楼梯,可以发现,递推式是f(n)=f(n-1)+f(n-2),也就是等于前一格的可行数量加上前两格的可行数量。熟悉的朋友可能发现了,这个递归式正是 斐波那契数列 的定义,不熟悉的朋友可以看看 Wiki - 斐波那契数列 。根据这个定义,其实很容易实现,可以用递归或者递推都是比较简单的,下面列举一下递推的代码:

public int climbStairs(int n) {int f1 = 1;int f2 = 2;if(n==1)return f1;if(n==2)return f2;for(int i=3;i<=n;i++){int f3 = f1+f2;f1 = f2;f2 = f3;}return f2;
}

可以很容易判断,上面代码的时间复杂度是O(n),面试一般都会实现一下,不过还没完,面试官会接着问一下,有没有更好的解法?还真有,斐波那契数列其实是有O(logn)的解法的。根据wiki我们知道,斐波那契数列是有通项公式的,如下:

所以如果我们用 Pow(x, n)中介绍的分治法来求解这个n次幂的话可以完成O(logn)的求解。还有另一种理解方法就是斐波那契数列的线性代数解法(参见 Wiki - 斐波那契数列),可以看到迭代是一个二乘二的简单矩阵,数列的第n个数就是求解这个矩阵的n-2次幂,同样用分治法就可以完成O(logn)的求解。
这是对于斐波那契数列问题的一般面试过程,先实现一下通常的O(n)的解法,然后再了解一下是否知道有O(logn)的解法,一般不要求实现,知道就行,不过其实实现也不是很难,有兴趣的朋友可以练习一下哈。

Climbing Stairs -- LeetCode相关推荐

  1. Climbing Stairs leetcode java

    题目: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cl ...

  2. 【动态规划 斐波那切数列】LeetCode 746. Min Cost Climbing Stairs

    LeetCode 746. Min Cost Climbing Stairs 本博客转载自:http://www.cnblogs.com/grandyang/p/8343874.html 存在无代价的 ...

  3. 【斐波那切数列】LeetCode 70. Climbing Stairs

    LeetCode 70. Climbing Stairs 这是一道利用斐波那切数列求解的题目.求斐波那切数列有比较经典的4种方法 (1)递归法:复杂度太高 (2)迭代法:时间复杂度为O(n)O(n)O ...

  4. [勇者闯LeetCode] 70. Climbing Stairs

    [勇者闯LeetCode] 70. Climbing Stairs Description You are climbing a stair case. It takes n steps to rea ...

  5. [LeetCode]70.Climbing Stairs

    [题目] You are climbing a stair case. It takes n steps to reach to the top. Each time you can either c ...

  6. 算法:Climbing Stairs(爬楼梯) 6种解法

    说明 算法:Climbing Stairs(爬楼梯) LeetCode地址:https://leetcode.com/problems/climbing-stairs/ 题目: You are cli ...

  7. 10.2 动态规划算法套路及空间优化 —— Climbing Stairs Unique Paths

    这一篇文章从最简单的动态规划题目开始,结合上一节动态规划三要素,以LeetCode两道基础的DP题目阐述DP问题的基本套路解法. 70. Climbing Stairs You are climbin ...

  8. Cllimbing Stairs [LeetCode 70]

    1- 问题描述 You are climbing a stair case. It takes n steps to reach to the top. Each time you can eithe ...

  9. 70. Climbing Stairs

    70. Climbing Stairs 1. 题目 You are climbing a stair case. It takes n steps to reach to the top. Each ...

最新文章

  1. 美国研发出百万兆级计算机 Summit,“最强超算”竞争加剧
  2. 如果你不曾失败,只因你从未尝试
  3. 如何使用grup制作U盘多重启动盘
  4. 程序员如何用Python了解女朋友的情绪变化?
  5. Swift 协议protocol
  6. iOS: 让自定义控件适应Autolayout注意的问题
  7. jsp java循环读取json_JAVA JSON遍历问题,求解(内附代码)
  8. 四剑客查找字符_linux 四剑客 find 、grep、sed、awk整理
  9. 上班摸鱼更方便了!国内最大短视频APP推出PC版:联想首发
  10. linux主机设备acl,linux上的终端类型、ACL、PAM模块
  11. 海康、大华等厂家监控摄像机rtsp地址格式
  12. Angularjs的IOC Inject分析
  13. 将Banner美观的放置于博客首页上
  14. 502php,php502是什么问题
  15. python下载网页歌曲
  16. 移动应用接入网页QQ登录
  17. 在PPT中批量导入图片
  18. ReThought (二): 如何照顾团队中的新人
  19. (5.7)mysql高可用系列——MySQL中的GTID复制(理论篇)【转】
  20. 【神经网络+数学】——(4)神经网络求解二元偏微分问题(二阶偏微分)

热门文章

  1. 优化设备管理,提升企业效益——工程设备管理模板的实用价值分析
  2. 小程序view自动换行
  3. 协同过滤推荐算法-基于用户的协同过滤UserCF及python实现
  4. 2012情人节祝福语
  5. spring boot activiti7常见问题
  6. fulltext mysql_mysql深入理解全文索引fulltext及实例剖析
  7. ssm欢欢宠物医院管理系统 毕业设计-附源码171734
  8. 【腾讯云IM】即时通讯的登录,登出,用户列表,私聊,图片发送
  9. Mac显示器分辨率修改工具 SwitchResX 4
  10. java ooa编程,例解基于UML的OOA、OOD