• (原)剑指offer跳台阶和矩形覆盖


    跳台阶
    • 时间限制:1秒空间限制:32768K

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
     
    分析同样为斐波那契数列边形这样的题肯定有公式
    设n级台阶,总跳法 jumps
    n      jumps
    1       1
    2       2
    3       3
    4       5
    5       8
    猜测 fbonicc(n) = fbonicc(n-1) + fbonicc(n-2)
    3        4          5
    111      1111        1111(1)
    21        211          211(1)
    12        121         121(1)
            112         112(1)
            22          22(1)
                       111(2)
                       21(2)
                       12(2)
    现在我们可以这样理解当   f(n) 比 f(n-1)少一个台阶
    这一个台阶我们可以当一步跳完,也可以与前面的一步结合成一次跳两阶,So
    前一种情况我们可以直接把这一步添到f(n-1)所有跳数后面,后一种情况很显然我们要向f(n - 1)借一步,也就是f(n-2)
    所以得f(n) = f(n-1) + f(n-2)
     
    c++代码实现
    class Solution {
    public:
      int jumpFloor(int number) {
        long long fiboncciA = 1;
            long long fiboncciB = 2;
            if (number == 1){
                return fiboncciA;
            }
            if (number == 2) {
                return fiboncciB;
            }
             
            int i;
            for (i = 3; i <= number; i++){
                int tmp = fiboncciB;
                fiboncciB = fiboncciA + fiboncciB;
                fiboncciA = tmp;
            }
            return fiboncciB;
      }
    };

    下一题

    • 时间限制:1秒空间限制:32768K
    • 题目描述
    我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
    !!猛一看这道题有点没看懂
     
    先来仔细分析一下
    1:所有小矩形都竖着覆盖
    2:当矩形横着覆盖时都是成对出现的
    看到这里有感觉很熟悉,这不就是跳台阶问题吗?答案:是的
    我们可以把题目改一下:有n个小矩形,去覆盖大矩形你可以一次用一个,也可以一次用两个,总共有多少种覆盖方法。
    现在可以看懂了吧!
     
    c++代码实现
    代码同上
     
     
  • 相关阅读:
    spring boot 中@Mapper和@Repository的区别
    yarn和npm的对比以及yarn的使用
    vue环境搭建
    小白的springboot之路(六)、跨域解决方案CORS
    DWR3.0框架入门(1) —— 实现ajax
    DWR3.0框架入门(3) —— ScriptSession的维护及优化
    DWR3.0框架入门(2) —— DWR的服务器推送
    Freemarker入门案例
    dom4j生成和解析xml文件
    struts2拦截器-自定义拦截器,放行某些方法(web.xml配置)
  • 原文地址:https://www.cnblogs.com/code-changeworld/p/4531367.html
Copyright © 2020-2023  润新知