算法学习记录八(C++)--->一句代码搞定变态跳台阶

来源:互联网 发布:易语言数据库 编辑:程序博客网 时间:2024/06/07 16:21

基本跳台阶问题

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

解法一(递归)

对于本题,前提只有 一次 1阶或者2阶的跳法。

  • a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);
  • b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)
  • c.由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)
  • d.然后通过实际的情况可以得出:只有一阶的时候 f(1) = 1 ,只有两阶的时候可以有 f(2) = 2
  • e.可以发现最终得出的是一个斐波那契数列:
class Solution {public:    int jumpFloor(int number) {        if(number <= 0){            return -1;        }        else if(number == 1){            return 1;        }        else if(number == 2){            return 2;        }        else{            return jumpFloor(number-1) + jumpFloor(number-2);        }    }};

看下运行时间
这里写图片描述

解法二(迭代)

f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5, 可以总结出f(n) = f(n-1) + f(n-2)的规律,但是为什么会出现这样的规律呢?假设现在6个台阶,我们可以从第5跳一步到6,这样的话有多少种方案跳到5就有多少种方案跳到6,另外我们也可以从4跳两步跳到6,跳到4有多少种方案的话,就有多少种方案跳到6,其他的不能从3跳到6什么的啦,所以最后就是f(6) = f(5) + f(4);

class Solution {public:    int jumpFloor(int number) {        if(number <= 0){            return 0;        }        if(number == 1){            return 1;        }        if(number == 2){            return 2;        }        int first = 1;        int second = 2;        int third = 0;        for(int i = 3;i<=number;i++){            third = first + second;            first = second;            second = third;        }        return third;    }};

这里写图片描述

很显然,递归更加耗时而且更加占用内存

变态跳台阶问题描述

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

分析

只是一个数学问题罢了,你随便推一下就能推出
f(n) = 2*f(n-1)
2^(n-1)

代码

class Solution {public:    int jumpFloorII(int number) {        return 1<<--number;    }};

一句话搞定!!!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 没住过酒店怎么办 上海合规网约车证件怎么办 取票没有身份证怎么办 买车票没有身份证怎么办 登机身份证丢了怎么办 飞机没带身份证怎么办 上飞机没带身份证怎么办 机场没带身份证怎么办 儿童坐飞机没有户口本怎么办 不需要行李托运化妆品怎么办 坐飞机被限制了怎么办 坐飞机没买保险怎么办 飞机起飞时难受怎么办 婴儿坐飞机没座位怎么办 转机行李不直达怎么办 儿童自己坐飞机怎么办手续 两岁宝宝发烧怎么办 网上购票待核验怎么办 老人坐飞机找不到登机口怎么办 儿童不能值机怎么办 飞机上旅客刁难怎么办 飞机上婴儿哭闹怎么办 飞机上婴儿啼哭怎么办 飞机儿童陪护手续怎么办 孕妇感冒鼻子堵怎么办 孕妇用了眼药水怎么办 孕妇用眼药水了怎么办 错过了登机时间怎么办 过了登机时间怎么办 孩子不喜欢做作业怎么办 宝宝腿不一样粗怎么办 一个小腿肿了怎么办 左右小腿不一样粗怎么办 小孩不敢自己睡怎么办 小孩不一个人睡怎么办 晚上一个人睡觉害怕怎么办 孩子自己睡害怕怎么办 小孩晚上睡觉怕怎么办 小孩分房睡害怕怎么办 坐飞机不认识字怎么办 科目一不识字怎么办