文章目录

  • 前言
  • 实现代码
  • 结果验证

前言

分享一道算法面试题。题目描述如下:

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

当然各种编程语言都是可以实现的。这里我们用C++语法去完成。这道题难度属于中等偏下,考验面试这的基本而已。考查面试者有没有递归思想,如果会递归写法,考官也会继续问有没有更好的解法。

思路如下:

/*
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:先找规律,
n级台阶 :1 2 3 4 5 ...
对应跳法:1 2 3 5 8 ...
发现规律: S(n) = S(n-1) + S(n-2); S(2) = 2,S(1) = 1,S(0) = 0;看是去用递归不错,代码很简洁直接使用规律S(n) = S(n-1) + S(n-2),但是递归 很耗费栈空间的(栈空间大小是有大小限制的),因为在函数未返回前所有的函数内的变量都被占用着;
直接用循环解法,时间复杂度干到O(n),空间复杂度为O(1)。循环解法从1 2 3 5 8...循环从前往后累加即可,将前2位数据(num1 num2)相加的到结果赋值给num2,在赋值给num2前,需要把num2值赋值给num1,这样就达到了 S(n) = S(n-1) + S(n-2)了。 */

实现代码

/*
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:先找规律,
n级台阶 :1 2 3 4 5 ...
对应跳法:1 2 3 5 8 ...
发现规律: S(n) = S(n-1) + S(n-2); S(2) = 2,S(1) = 1,S(0) = 0;看是去用递归不错,代码很简洁直接使用规律S(n) = S(n-1) + S(n-2),但是递归 很耗费栈空间的(栈空间大小是有大小限制的),因为在函数未返回前所有的函数内的变量都被占用着;
直接用循环解法,时间复杂度干到O(n),空间复杂度为O(1)。循环解法从1 2 3 5 8...循环从前往后累加即可,将前2位数据(num1 num2)相加的到结果赋值给num2,在赋值给num2前,需要把num2值赋值给num1,这样就达到了 S(n) = S(n-1) + S(n-2)了。 */
#include <iostream>
using namespace std;class SolutionFlag {
public:// 循环解法 int jumpFloor(int number) {if (number <= 0) // 参数异常,直接返回0 return 0;if (number <= 2) // 台阶数为1、2直接返回跳法数量return number;int num1 = 1,num2 = 2;int count = 0; // n级台阶跳法数量 for (int i = 3; i <= number; i++){count = num1 + num2;num1 = num2;num2 = count;}return count;}// 递归解法 int jumpFloor2(int number) {if(number <= 0) // 参数异常,直接返回0 return 0; if(number == 1 || number == 2)return number; return jumpFloor2(number-1) + jumpFloor2(number-2);}
};int main(int argc, char *argv[])
{//1 2 3 5 8 13...SolutionFlag flag;cout << "---循环解法---" << endl;  cout << "flag.jumpFloor(1) " << flag.jumpFloor(1) << endl;cout << "flag.jumpFloor(2) " << flag.jumpFloor(2) << endl;cout << "flag.jumpFloor(3) " << flag.jumpFloor(3) << endl;cout << "flag.jumpFloor(4) " << flag.jumpFloor(4) << endl;cout << "flag.jumpFloor(5) " << flag.jumpFloor(5) << endl;cout << "flag.jumpFloor(6) " << flag.jumpFloor(6) << endl;cout << "---递归解法---" << endl;cout << "flag.jumpFloor2(1) " << flag.jumpFloor2(1) << endl;cout << "flag.jumpFloor2(2) " << flag.jumpFloor2(2) << endl;cout << "flag.jumpFloor2(3) " << flag.jumpFloor2(3) << endl;cout << "flag.jumpFloor2(4) " << flag.jumpFloor2(4) << endl;cout << "flag.jumpFloor2(5) " << flag.jumpFloor2(5) << endl;cout << "flag.jumpFloor2(6) " << flag.jumpFloor2(6) << endl;return 0;
}

结果验证

C++面试题-青蛙跳台阶的2种解法相关推荐

  1. 魅族2016Java互联网方向其中一道笔试题--青蛙跳台阶问题

    问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题目分析: 1)这里的f(n) 代表的是n个台阶有一次1,2,...n阶的 跳 ...

  2. java魅族面试题_魅族2016Java互联网方向其中一道笔试题--青蛙跳台阶问题

    问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题目分析: 1)这里的f(n) 代表的是n个台阶有一次1,2,...n阶的 跳 ...

  3. 青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”

    本文以C语言实现. 目录 前言 一.斐波那契阿数列基础知识 二.引例:青蛙跳台阶 三.破题分析:举例归纳 1. 三板斧的使用 举例 模拟(必要时画图) 找规律 2. 代码展示 四.拓展用例:矩形覆盖问 ...

  4. 剑指offer:面试题10- II. 青蛙跳台阶问题

    题目:青蛙跳台阶问题 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:10000 ...

  5. 面试题:基于Python的青蛙跳台阶两种解法

    问题 一只青蛙要跳上 n 层高的台阶,一次能跳一级,也可以跳两级,请问这只青蛙有多少种跳上这个 n 层高台阶的方法? 递归 设青蛙跳上 n 级台阶有 f(n)种方法,把这 n 种方法分为两大类,第一种 ...

  6. leetcode面试题46. 把数字翻译成字符串/典型的青蛙跳台阶题目(递归),动态规划

    文章目录 题目 基本思想 题目 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l&q ...

  7. 动态规划入门青蛙跳台阶问题

    0 题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...

  8. 把数字翻译成字符串/斐波那契数列/青蛙跳台阶

      今天做到剑指Offer中面试题46:把数字翻译成字符串,一看,这不是之前的斐波那契数列和青蛙跳台阶的翻版吗?遂记录一下解题思路. 题目:给定一个数字,我们按照如下规则把它翻译为字符串: 0 0 0 ...

  9. 自制青蛙跳台阶小游戏~

    青蛙跳台阶小游戏 1.概念(concept)文档 楔子(Setting):千百年来,人们在贬低别人时,常用井底之蛙来描述那个人,但这却让青蛙不开心了,于是青蛙决定跳出井底,为自己讨一个公道. 玩法(G ...

最新文章

  1. .NET 面试题总结 (附有参考答案) 第1部分
  2. dubbo学习笔记 第四章构建dubbo的web应用 上
  3. 频率分布直方图组距如何确定_吃透教材理解教参,《直方图》教学反思
  4. python错误修复_如何修复python错误(对象不可调用)
  5. 来自网页的消息服务器繁处理忙,EventSource 对象用于接收服务器发送事件通知,是网页自动获取来自服务器的更新...
  6. obj.href 与 obj.getAttribute(href)的区别
  7. Python算法(含源代码下载)
  8. LeetCode:交替打印【1115】
  9. class.forname()中要写相对路径吗?_自考考试时间推迟,自考通过率会降低吗?
  10. 字节流和字符流的读写
  11. Java入门到精通全教程
  12. 射极跟随器实验报告数据处理_射极跟随器实验报告
  13. dbf 转mysql_DbfToMysql-DbfToMysql(Dbf数据转换Mysql工具)下载 v1.6官方版--pc6下载站
  14. springboot整合couchbase
  15. SIM868调试日志
  16. VirtualBox虚拟机安装Windows XP
  17. php es6写法,深入浅出es6模板字符串
  18. 【杂项】任务管理器的专用GPU内存和共享GPU内存
  19. Oracle表空间增加方法
  20. Vue:页面加载进度条

热门文章

  1. 文件服务器 工作站 通信媒体,用于多工作站/多平台非线性视频编辑系统的媒体文件访问和存储解决方案...
  2. tomcat 优化_浅谈Tomcat服务器优化方法
  3. 终面后拿offer几率_面经 | 如愿以偿进入自己喜欢的游戏行业:我是怎样争取到理想OFFER的?...
  4. XShell笔记-XShell登录脚本的使用
  5. 信息安全工程师笔记-RSA密码
  6. Spring Boot笔记-设置拦截器为false时返回的Body
  7. Kafka笔记-Spring Boot消费者构造
  8. C++|Qt最简单的http的get请求
  9. 序列复杂度怎么看_《趣学算法》作者又一力作上架,再分享您一篇算法复杂度...
  10. 字母c语言定义为什么变量,C语言为什么要规定对所用到的变量要“先定义,后使用”...