矩形覆盖_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/72a5a919508a4251859fb2cfb987a0e6?tpId=13&tags=&title=&difficulty=0&judgeStatus=0&rp=1
题目描述我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?注意:约定 n == 0 时,输出 0。
解题思路当 n 为 1 时,只有一种覆盖方法:
当 n 为 2 时,有两种覆盖方法:
要覆盖 2*n 的大矩形,可以先覆盖 2*1 的矩形,再覆盖 2*(n-1) 的矩形;或者先覆盖 2*2 的矩形,再覆盖 2*(n-2) 的矩形。而覆盖 2*(n-1) 和 2*(n-2) 的矩形可以看成子问题。该问题的递推公式如下:
【C++解法】class Solution { public: int rectCover(int number) { int f1 = 1, f2 =2, fn = number; for(int i=3; i<=number; i++) { fn = f1+f2; f1 = f2; f2 = fn; } return fn; } };【C解法】
int rectCover(int number ) { int f1 = 1, f2 = 2, fn = number; for (int i = 3; i <= number; i++) { fn = f1 + f2; f1 = f2; f2 = fn; } return fn; }【Java解法】
public class Solution { public int rectCover(int target) { int f1 = 1, f2 = 2, fn = target; for (int i = 3; i <= target; i++) { fn = f1 + f2; f1 = f2; f2 = fn; } return fn; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)