有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。
测试样例:
3
返回:2
这样写为什么通不过呢?错误提示:请检查是否存在数组越界等非法访问情况
class GoUpstairs:
def countWays(self, n):
if n<=1:
return 0
elif n<=3:
return n-1
else:
a,b=1,2
for i in range(4,n+1):
temp=a+b
a=b
b=temp
return b%1000000007
'''动规问题'''
## python代码实现(python 3.5.2验证通过) class GoUpstairs: """非递归方法""" def CountWays(self, n): # write code here if n < 1: return 0 res = [0, 1, 2] if n > 3: for i in range(3,n): res.append(res[i-1] % 1000000007 + res[i-2] % 1000000007) return res[n-1] % 1000000007 """递归方法""" def CountWaysRecursion(self, n): # write code here if n <= 1: return 0 if n == 2: return 1 if n == 3: return 2 if n > 3: return (self.CountWaysRecursion(n-1)%1000000007 + self.CountWaysRecursion(n-2)% 1000000007) % 1000000007 if __name__ == "__main__": maxNumStairs = 100 print("num stairs: (Dynamic Results,Recursion Results)") for cnt in range(1,maxNumStairs): ## 1-100 staors stairs = GoUpstairs() res = stairs.CountWays(cnt) resRecursion = stairs.CountWays(cnt) print(" %d stairs: (%d, %d)" % (cnt, res, resRecursion))