剑指offer 66道-python+JavaScript
矩阵覆盖
题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
思路
分别用python和javascript实现
用2*1的小矩阵竖着放时,剩下的覆盖方法为f(7),小矩阵横着放时,下面必须还有一个横着,剩下覆盖方式为f(6),f(8)=f(7)+f(6)
github
python代码链接: https://github.com/seattlegirl/jianzhioffer/blob/master/smallrectangle_bigrectangle.py.
题目代码(python)
# -*- coding:utf-8 -*-
class Solution:
def rectCover(self, number):
#竖着覆盖f(number-1)
#横着覆盖f(number-2)
# write code here
if number==0:
return 0
if number==1:
return 1
if number==2:
return 2
result=[0]*(number+1)
result[0]=0
result[1]=1
result[2]=2
for i in range(3,number+1):
result[i]=result[i-1]+result[i-2]
return result[number]
if __name__ == "__main__":
print(Solution().rectCover(3))
github
JavaScript代码链接: https://github.com/seattlegirl/jianzhioffer/blob/master/smallrectangle_bigrectangle.js.
题目代码(JavaScript)
function rectCover(number)
{
// write code here
//竖着覆盖f(number-1)
//横着覆盖f(number-2)
var result=new Array(number+1)
if(number<=0){
return 0;
}
if(number==-1){
return 1;
}
if(number===2){
return 2;
}
result[0]=0;
result[1]=1;
result[2]=2;
for(var i=3;i<=number;i++){
result[i]=result[i-1]+result[i-2];
}
return result[number]
}
console.log(rectCover(3))