这个问题同样是一个斐波那契数列问题,首先判断当number输入小于0的情况,这时候应该返回None; 否则则是小于等于1的情况,即0,1的两种情况,这时候返回的应该同样是0,1,所以return number; 最后就是大于1的情况,当等于2时,考虑最后一步如果是横着,则剩下的是f(1)中情况,如果是竖着,同样剩下的是f(1)种情况; 以此类推,假设当等于8时,最后一步如果是竖着,剩下的是2*7,这时候应该是f(7)种方法, 如果是横着放,则上下的方块同样也要横着放,剩下的那一部分为2*6,此时为f(6)种情况,所以为f(8) = f(7)+f(6) # -*- coding:utf-8 -*- class Solution: def rectCover(self, number): # write code here if number < 0: return None elif number <= 1: return number else: rectCover0 = 0 rectCover1 = 1 rectCoverN = 0 for i in range(number): rectCoverN = rectCover1 + rectCover0 rectCover0 = rectCover1 rectCover1 = rectCoverN return rectCoverN