剑指offer--day04

1.1题目:变态跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

1.2解题思路:

  • 当n=1时,结果为1;
  • 当n=2时,结果为2;
  • 当n=3时,结果为4;

  以此类推,我们使用数学归纳法不难发现,跳法f(n)=2^(n-1)。

1.3代码:

1 class Solution:
2     def jumpFloorII(self, number):
3         # write code here
4         if number <= 1:
5             return number
6         total = 1
7         for i in range(1, number):
8             total *= 2
9         return total

 

2.1题目:矩阵覆盖:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

2.2解题思路:

  以2x8的矩形为例。示意图如下:

 

剑指Offer(十):矩形覆盖

 

  我们先把2x8的覆盖方法记为f(8)。用第一个1x2小矩阵覆盖大矩形的最左边时有两个选择,竖着放或者横着放。当竖着放的时候,右边还剩下2x7的区域,这种情况下的覆盖方法记为f(7)。接下来考虑横着放的情况。当1x2的小矩形横着放在左上角的时候,左下角和横着放一个1x2的小矩形,而在右边还剩下2x6的区域,这种情况下的覆盖方法记为f(6)。因此f(8)=f(7)+f(6)。此时我们可以看出,这仍然是斐波那契数列。

 

2.3代码:

 1 # -*- coding:utf-8 -*-
 2 class Solution:
 3     def rectCover(self, number):
 4         # write code here
 5         if number <= 2:
 6             return number
 7         first = 1
 8         second = 2
 9         f = 0
10         for i in range(3, number+1):
11             f = first + second
12             first = second
13             second = f
14         return f

 

刷题平台:牛客网:https://www.nowcoder.com/ta/coding-interviews

参考:https://cuijiahua.com/

posted @ 2019-07-11 19:33  我叫郑小白  阅读(118)  评论(0编辑  收藏  举报