栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

:跳台阶

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

:跳台阶

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果) :
https://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4?tpId=13&tqId=11161&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

解析

对于本题,前提只有 一次 1阶或者2阶的跳法。
a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1);
b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2)
c.由ab假设可以得出总跳法为: f(n) = f(n-1) + f(n-2)
d.然后通过实际的情况可以得出:只有一阶的时候 f(1) = 1 ,只有两阶的时候可以有 f(2) = 2
e.可以发现最终得出的是一个斐波那契数列:

| 1, (n=1)
f(n) = | 2, (n=2)
| f(n-1)+f(n-2) ,(n>2,n为整数)

代码:python
# 斐波那契方法
   def jumpFloor(self, number):
 # write code here
 a = 1
 b = 1
 for i in range(number):
     a,b = b,a+b
 return a

# 排列组合方法
    def jumpFloor(number):
 # write code here
 # all 1 step
 kinds = 1
 # 2 steps for 1:number/2
 steps2 =1 
 temp = 1
 while(2*steps2 <= number):
     steps1 = number - steps2*2
     all_times = steps1 + steps2 #表示一步的次数+两步的次数
     temp *= steps2    #s2!
     sum = 1
     for i in range(steps2):
  sum *= all_times - i #(s1+s2)!/s1!
     kinds += sum/temp #sum/temp : (s1+s2)!/s1!s2! 
     steps2 += 1
 return int(kinds)

代码:C
链接:https://www.nowcoder.com/questionTerminal/8c82a5b80378478f9484d87d1c5f12a4
来源:牛客网

//递归方法
   int jumpFloor(int number) 
    {   
if(number<=2)
    return number;
else
    return jumpFloor(number-1)+jumpFloor(number-2);
    }
 
//斐波那契方法
   int jumpFloor(int number) 
    {   
int f1=1,f2=2;
while(number>2)
{
    f1=f1+f2;
    f2=f1+f2;
    number-=2;
}
return number==1?f1:f2;
    }
 
//排列组合方法    
    int jumpFloor(int number) 
    {
 int kinds=0;
 //all 1 step
 ++kinds;
 //2 steps for 1:number/2
 int steps2=1;
 long long temp=1;
 while(2*steps2 <= number)
 {
     int bits= number-steps2;
     temp*=steps2;
     long long  sum=1;
     for(int i=0;i

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号