【Description】

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

【分析】

利用枚举抽象出一般表达式

当n=0时,f(n)=1

n=1,f(n)=1

n=2,f(n)=2

n=3,fn=3

n=4,fn=5

f(2)=f(1)+f(0)

f(3)=f(2)+f(1)

f(4)=f(3)+f(2)

.......

f(n)=f(n-2)+f(n-1)

从上面分析可以归纳出一般表达式:

进而可以很容易写出递归算法:

class Solution {

public:

int climbStairs(int n) {

//f(n)=f(n-2)+f(n-1)

if (n == 0) {

return 0;

}

if (n == 1) {

return 1;

}

if (n == 2) {

return 2;

}

return climbStairs(n - 1) + climbStairs(n - 2);

}

};

但是上面的方法有一个缺点,那就是重复计算很多,导致耗时很长,下面的算法保存了中间结果,如果已经计算过了,那么直接返回中间结果值,如果没有,再进行递归计算,并把结果保存起来。

实现方法二

class Solution {

public:

int climbStairs(int n) {

//f(n)=f(n-2)+f(n-1)

if (n == 0) {

return 0;

}

if (n == 1) {

return 1;

}

if (n == 2) {

return 2;

}

if (res.size() >= (n-2)) {

return res.at(n - 3);

}

res.push_back(climbStairs(n - 1) + climbStairs(n - 2));

return res.back();

//return climbStairs(n - 1) + climbStairs(n - 2);

}

private:

vector res;

};

实现方法二虽然避免了重复计算,但是终归还是通过递归实现的,如果通过非递归的方法实现呢?通过上面的分析可以看到,其实交换值得方式就可以迭代得到下一个值,因此,非递归的实现方法如下:

class Solution {

public:

int climbStairs(int n) {

//f(n)=f(n-2)+f(n-1)

if (n <= 1) {

return 1;

}

int nCur,nPrev,nPrevP;

nPrevP = 1;

nPrev = 1;

for (int i = 2; i <= n; ++i) {

nCur = nPrev + nPrevP;

nPrevP = nPrev;

nPrev = nCur;

}

return nCur;

}

};

c语言爬楼梯不用递归,[leetcode]爬楼梯的递归和非递归方法相关推荐

  1. 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)

    70. 爬楼梯(剑指 Offer 10- II. 青蛙跳台阶问题) 递归(英语:Recursion),是指在函数的定义中使用函数自身的方法.有意义的递归通常会把问题分解成规模缩小的同类子问题,当子问题 ...

  2. 蜗牛爬井题目c语言,一年级奥数,蜗牛爬井问题

    原标题:一年级奥数,蜗牛爬井问题 一年级奥数,蜗牛爬井 蜗牛爬井这是我们经常会遇到的同一类型题目,进几步退几步,最后求出题目的要求,我们一起来看看蜗牛爬井这类题型. 例题1:小红玩跳格子游戏,每次往前 ...

  3. 大众点评 数据爬取 (字体反爬)

    大众点评 数据爬取 (字体反爬) 项目描述 在码市的平台上看到的一个项目:现在已经能爬取到需要的数据,但是在爬取的效率和反爬措施上还需要加强. 项目分析 1.打开大众点评的首页'http://www. ...

  4. 常见的反爬措施:UA反爬和Cookie反爬

    本文分享自华为云社区<Python爬虫反爬,你应该从这篇博客开启,UA反爬,Cookie 特定参数反爬>,作者:梦想橡皮擦. 通过前面的爬虫程序,你或许已经注意到,对于目标站点来说,爬虫程 ...

  5. python爬考研_用Python爬取了考研吧1000条帖子,原来他们都在讨论这些!

    写在前面 考研在即,想多了解考研er的想法,就是去找学长学姐或者去网上搜索,贴吧就是一个好地方.而借助强大的工具可以快速从网络鱼龙混杂的信息中得到有价值的信息.虽然网上有很多爬取百度贴吧的教程和例子, ...

  6. Python爬虫之网易云歌单音频爬取(解决urlretrieve爬取文件不能播放问题)

    网易云歌单音频爬取 写在前面:最近学习爬虫,对小说和图片都进行过简单爬取,所以打算爬取音频,但是其中遇到点问题也解决了,写下博客记录并希望对大家也有帮助. 爬取对象:对于目前主流的几个音频播放网站,我 ...

  7. python爬取手机微信_Python爬取微信好友

    前言 今天看到一篇好玩的文章,可以实现微信的内容爬取和聊天机器人的制作,所以尝试着实现一遍,本文记录了实现过程和一些探索的内容 itchat安装 对微信的控制可以使用itchat来实现,我们找到itc ...

  8. 1.1.5 蚂蚁。一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。

    蚂蚁 题目来源 :<算法竞赛入门经典--训练指南>/刘汝佳,陈锋编著 一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒.当两只蚂蚁相撞时,二者同时掉头( ...

  9. python爬虫难度排行_【Python爬虫】爬了七天七夜,终于爬出了博客园粉丝数排行榜!...

    [Python爬虫]爬了七天七夜,终于爬出了博客园粉丝数排行榜! 文章发出不到30分钟就被首页下架了,默哀-- 起因 为了督促自己更加积极地写博客,我希望有一个排名系统能让我看到自己的进步.但是博客园 ...

  10. C语言过河问题主函数,c,c++_C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因?,c,c++,算法 - phpStudy...

    C语言踩石头过河问题,用DFS搜索递归了17万次但是没报错,请问是什么原因? 这是原题目,后面附上我的代码,刚刚接触DFS,不是很熟练,求教育--谢谢!!!TUT 这是题目,我大概概括一下 用'※'和 ...

最新文章

  1. 丢弃Transformer!旷视和西安交大提出基于FCN的端到端目标检测网络
  2. dedecms调用当前栏目的子栏目怎么操作
  3. asp.net Page页面中的一个有用属性
  4. mediawiki 搭建
  5. 真・WPF 按钮拖动和调整大小
  6. ios支付宝支付失败不回调_为什么 iOS 支付成功后能回到 APP ,但是没有回调?...
  7. Maven——安装(二)
  8. python库批量安装的方法
  9. Atitti 固化数据库表结构方案
  10. MicroMsg.SDK.WXApiImplV10: register app failed for wechat app signature check failed
  11. mysql 拼音首字母_MySQL拼音首字母查询
  12. php调用海康,手把手教你php对接海康api
  13. 腹肌锻炼视频(02):八种基本动作
  14. 【Educational Codeforces Round 61 (Rated for Div. 2) D.Stressful Training】二分
  15. 数据在链路层传播相关时间计算
  16. uni-app:只用2小时学习+上手就够了
  17. Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)
  18. js-isNaN | Number.isNaN
  19. 2019最新某 高级JAVA架构师之路教程
  20. 安川与欧姆龙Plc通讯设置方法

热门文章

  1. win10开启虚拟化服务器,Windows10开启Hyper-V虚拟机管理器
  2. 获取iPhone手机 UDID的方式--一网打尽(无论有无MAC电脑)
  3. 将World中的向下箭头替换为回车符
  4. 如何提高团队的工作效率
  5. cocos 层级渲染与管理
  6. 漏洞挖掘 符号执行_漏洞挖掘综述
  7. 图基(Tukey)检验
  8. Java 提取PDF文档中的图片
  9. 如何彻底卸载office!!
  10. 关于原生HTML+CSS div的高度随着宽度按比例缩放