题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

求解思路

刚开始是想要通过递归模拟求解,结果超时了。但是这样肯定能求出解来,不过计算了大量重复的代码,复杂度应该是指数级的。

第一次想的正确的思路应该是:
先计算出最多能放几个2步,假设是n个
i从1到n,计算i个2步的情况下步法的组合数,所有组合数累加到sum上
sum+1是最终解,因为全是1的情况也要考虑
复习排列组合的公式:
Cnk=n(n−1)(n−2)⋯(n−k+1)(n−k)(n−k−1)⋯2×1C_{n}^{k}=\frac{n(n−1)(n−2)⋯(n−k+1)}{(n−k)(n−k−1)⋯2×1}Cnk​=(n−k)(n−k−1)⋯2×1n(n−1)(n−2)⋯(n−k+1)​
提交上述代码后,显示时间是3ms

但是,结合前一题的斐波那契数列和其他dalao的题解,本题目实际上是一个斐波那契数据列的思路!!!更加简介的思路如下:

  • 只有一个台阶,步法为1,;有两个台阶步法是2
  • 假设走到第那个台阶花费了F(n)F(n)F(n)步;如果之前的一步走了一个台阶,那么之前的步骤是F(n−1)F(n-1)F(n−1)步;如果之前的一部走了两个台阶,那么之前的步骤是F(n−2)F(n-2)F(n−2)步;所以F(n)=F(n−1)+F(n−2)F(n)=F(n-1)+F(n-2)F(n)=F(n−1)+F(n−2)

因此,这种方式比排列组合的思路要简单得多,而且不易出错!!最终版本是这个。

解题代码

#include <bits/stdc++.h>
using namespace std;
// 这是超时的,但是结果正确
class Solution_failed {public:int jumpFloor(int number) {int sum = 0;if(number == 0) {return 1;} else if(number < 0) {return 0;} else {sum += jumpFloor(number - 1);  // 跳一个sum += jumpFloor(number - 2);  // 跳两个return sum;}}
};// 这是AC的代码,使用了组合
class Solution_comp {public:int jumpFloor(int number) {// 只要确定了2步的位置,1步的位置随便插入int n = number / 2;int sum = 1;for(int i = 1; i <= n; ++i) {// 注意,每增加一个2,总的空位置就要少一个,int t = comp(number - i, i);sum += t;}return sum;}// 计算组合数int comp(int n, int k) {long long up = 1, down = 1;for(int i = n; i >= n - k + 1; i--) {up *= i;}for(int j = k; j >= 1; j--) {down *= j;}return up / down;}
};// 最终提交版本
class Solution {public:int jumpFloor(int number) {if(number == 1) {return 1;}if(number == 2) {return 2;}int a = 1, b = 2;for(int i = 3; i <= number; ++i) {int t = a;a = b;b = t + b;}return b;}
};
// 以下是测试代码
int main() {Solution_failed sof;Solution_comp so;Solution so;for(int i = 1; i <= 10; ++i) {cout << sof.jumpFloor(i) << "," << sc.jumpFloor(i) \<< "," << so.jumpFloor(i) << endl;}return 0;
}

运行时间上,数列思路和组合思路都是3ms,而实际上,应该是数列思路更快才对。。。。

剑指offer之青蛙跳台阶相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 10- II. 青蛙跳台阶问题 Java

    <LeetCode力扣练习>剑指 Offer 10- II. 青蛙跳台阶问题 Java 一.资源 题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总 ...

  2. 【LeetCode】剑指 Offer 10- II. 青蛙跳台阶问题

    [LeetCode]剑指 Offer 10- II. 青蛙跳台阶问题 文章目录 [LeetCode]剑指 Offer 10- II. 青蛙跳台阶问题 一.动态规划 总结 一.动态规划 class So ...

  3. 剑指 Offer 10- II. 青蛙跳台阶问题 -递归法和数学递推法

    剑指 Offer 10- II. 青蛙跳台阶问题 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007), ...

  4. LeetCode刷题剑指 Offer 10- II. 青蛙跳台阶问题

    LeetCode刷题剑指 Offer 10- II. 青蛙跳台阶问题 动态规划的思想,青蛙每次可以跳一个或两个台阶,要想得到最终青蛙跳n阶台阶的方法数,需要找到青蛙跳n-1个台阶的方法数和跳n-2个台 ...

  5. 剑指Offer 10- II—青蛙跳台阶问题

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

  6. 【剑指 Offer 46. 把数字翻译成字符串】【剑指 Offer 10- II. 青蛙跳台阶问题】【198. 打家劫舍】【动态规划】

    青蛙跳台阶,打家劫舍,字母相同编码三道题思路总结 总结我自己思路的,写的不详细,想看详细的可以跳转到我加的链接,都是力扣上同一个人写的题解,很厉害. 字符串翻译数字 字符串翻译数字 当最后一位数字单独 ...

  7. 剑指offer之青蛙跳台阶问题

    1 问题 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,求该青蛙跳上一个n级的台阶总共有多少种跳法? 2 分析 我们可以定位函数f(n),n为n级别的台阶,f(n)的值是青蛙有多少种跳法,我们知道 ...

  8. 剑指 Offer 10- I. 斐波那契数列/剑指 Offer 10- II. 青蛙跳台阶问题

    2020-07-02 1.题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少 ...

  9. 【剑指Offer】青蛙跳台阶问题

    题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. import java.util.*; public class FrogAn ...

最新文章

  1. 在Windows下创建硬连接和文件夹连接点的工具
  2. List集合add方法覆盖原来的内容解决办法
  3. str()和repre()的区别
  4. sklearn没有实现ID3算法
  5. Java IO: Reader和Writer
  6. 【数据结构与算法】字符串匹配 KMP 算法
  7. 双11个性化推荐背后,阿里云“舜天”如何应对百亿次挑战? 1
  8. 进阶Java架构师必看书:大型架构+框架+性能优化+中间件+分布式
  9. get和post混合提交
  10. 轨迹压缩文献阅读 TrajStore: An Adaptive Storage System for Very Large Trajectory Data Sets
  11. Java程序设计语言基础04:数组
  12. UNI-APP获取手机MAC地址
  13. 愿你永远像个boy,找到自己的光亮
  14. PhishTank恶意URL数据集分享
  15. 史上最全的PHP常用函数大全,不看看你就out了(还会不断更新哦!)
  16. matlab prob计算乘积
  17. LVGL 8.2 meter
  18. 仿IOS回弹效果支持任何控件
  19. No module named ‘mdx_math‘
  20. 顺序结构(基本结构)

热门文章

  1. python编写交互界面查分_python小习题:查分数 - 李金龙
  2. bash脚本使用记录
  3. ~~约数之和(附模板题)
  4. COCO和 PASCAL VOC标注格式的学习笔记
  5. 支持向量机SVM的学习笔记
  6. LIBRARY_PATH和LD_LIBRARY_PATH
  7. 剑指offer——15.二进制中1的个数
  8. CSS知识点补充收集
  9. TortoiseSVN 配合 Beyond Compare 3 或 WinMerge 的设置
  10. 【C++ Primer】第五章学习笔记(循环和关系表达式)