跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解题思路:
动态规划 同斐波那契数列:
f(1)=1 f(2)=2 f(n) = f(n-1)+f(n-2) (n>2)
代码:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloor(self, number):
# write code here
result= [1,2]
while len(result) <= number:
result.append(result[-1]+result[-2])
if number == 1:
return 1
else:
return result[number-1]##注意与斐波那契不同
变态跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路:
- 每一级台阶跳或不跳都有两种
- 一级台阶有1种,2^0种
- 二级台阶,第一级台阶跳或者不跳,2^1种
- 三级台阶,第一级台阶跳或者不跳,2种,第二级台阶跳或者不跳,2种,共2^2种
- n级台阶……共2^{n-1}种,即F(n) = 2^(n-1)
代码:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number<=0:
return 0
else :
return 2**(number-1)
矩阵覆盖
题目描述
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解题思路:
f(0)=0
f(1)=1
f(2)=2
f(n)=f(n-1)+f(n-2)
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
# write code here
if number == 0:
return 0
result = [1,2]
while number>len(result):
result.append(result[-1]+result[-2])
return result[number-1]