跳台阶
跳台阶
http://www.nowcoder.com/questionTerminal/8c82a5b80378478f9484d87d1c5f12a4
"首先声明本测试代码由于运行时间并未能通过,但在本机上测试通过"
解题思路
由于每次跳跃只能跳一个台阶或者两个台阶,所以我们可以跟踪跳2个台阶的次数来求解相应问题,其实这个问题可以理解为台阶数n可以有多少种不同有1,2相加的方案。我们可以来看具体的案例
案例一 台阶数为3
由于是由1和2相加,所以3最多只能由一个2和一个1组成,如果是两个2则大于3,下面就有第一种情况1,2(此种情况有两种排列方案1,2和2,1),如果此时将2拆分成两个1,则又有一种方案1,1,1,由此我们可以得出只要确定每种方案中2的个数在求相应的排列组合即可得到相应的结果。
所以我们的总的解题思路就是求出n中最大拥有的2的个数,然后不断将2拆分成1,1,再分别求排列组合
class Solution: def jumpFloor(self, number): # write code here if number<=1: return 1 number_2=number//2#n最多可以由多少个2组成 number_index=0#1和2总的个数 if number%2==0: number_index=number_2 else: number_index=number_2+1 sum=0 index=0 for i in range(number_2,-1,-1): sum+=self.SortLine(number_index+index,i) index+=1#每次拆分后1和2的总个数增加一个 return sum def SortLine(self,m,n):#求相应的排列组合,m个元素中有n个2 if m==n or n==0: return 1 sum=1 sum0=1 for i in range(m,m-n,-1): sum*=i for i in range(1,n+1): sum0*=i return sum/sum0