题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
一开始看到脑阔疼
有点没思路
后面想到排列组合…发现行得通
各位看官没有思路的现在也可以往排列组合这边想想
…
简单的说
问的是总共跳台阶的方式有几种
假设n个台阶
显然每次都跳一个台阶的话.就只有一种跳法
如果有一次跳了两个台阶的话,就有C N-1 1种跳法即(n-1)!/(n-2)!
如果有两次跳了两个台阶的话 就有C N-2 2种跳法 即(n-2)!/2!*(n-2-2)!
以此类推
OK
思路就是这样
各位自己动手实现下叭
今天是大寒呢…回了家还是很开心…在家里敲敲代码都神清气爽的
舒服
最后上代码,当然还是自己手码一遍印象会更深刻哦
class Solution:
tempres=[] #用来存储各个数的阶乘,以备之后的排序选择使用
def factorial(self,n):
self.tempres.append(1)
for i in range(1,n):
jiecheng=self.tempres[i-1]*i #计算阶乘
self.tempres.append(jiecheng)
def jumpFloor(self, number):
self.factorial(100)
sum=0
sum+=1 #全部只跳一个台阶,则只有一种跳法
two_num=1 #跳两个台阶的次数
while(True):
if(two_num*2>number):
break
if(two_num*2==number): #如果number是偶数,正好等于的话,全跳2台阶,也是一种跳法
sum+=1
break
else: #跳n次两台阶,其余皆跳一台阶,C n-two two
solution_num=self.tempres[number-two_num]/((self.tempres[two_num])*(self.tempres[number-2*two_num]))
sum+=solution_num
two_num+=1
return (int)(sum)