zoukankan      html  css  js  c++  java
  • 剑指offer | 跳台阶 | 02

    思路分析

    这是一个很经典的题目,但是要注意,这里的跳台阶必须"刚刚好",也就是当只有一个台阶的时候,那么只能选择跳一个台阶的跳法,不能跳两个台阶.

    可以正着推,也可以反着推.

    还有,跳台阶的问题本质上就是斐波那契的一个变式问题.

    如果是39级台阶,那么就是39级到0级, 或者0级到39级.

    需要理解,从大到小,在从小到大是一个递归的过程, 直接从小到大是一个递推的过程.

    这个题目为了优化,,肯定使用递推的思路.

    关于f(0)=1的尝试解释:

    这是一个组合问题,那么每次其实都是在选择是走一步还是走两步.

    f(1)是一个台阶的时候有几种选法,很显然,只能选一步.

    那么f(0)如何解释呢? f(0)就是什么都不选,什么都不选也算是一种组合方式.

    递归写法

    cpp

    class Solution {
    public:
        int jumpFloor(int number) {
            if(number<0)return 0; // 不合法,过了也没有用
            if(number==0)return 1;
            return jumpFloor(number-1)+jumpFloor(number-2);
        }
    };
    

    python

    # -*- coding:utf-8 -*-
    class Solution:
        def jumpFloor(self, number):
            if number<0: return 0 # 无效跳法
            if number==0: return 1 # 有效跳法
            return self.jumpFloor(number-1)+self.jumpFloor(number-2)
    

    迭代(递推)写法

    cpp

    class Solution {
    public:
        int jumpFloor(int number) {
            int a=1,b=1; // 初始值是不一样的
            for(int i=0;i<number;i++){
                int c = a+b;
                a=b,b=c;
            }
            return a;
        }
    };
    

    python

    # -*- coding:utf-8 -*-
    class Solution:
        def jumpFloor(self, number):
            a,b=1,1
            for _ in range(number):
                c = a+b
                a,b=b,c
            return a
    
  • 相关阅读:
    HCIE_交换篇_ARP
    HCIE_交换篇_MAC地址漂移
    ubuntu19+nextcloud
    HCIE_交换篇_MAC地址
    华三交换机恢复出厂设置
    光纤相关
    华三防火墙实用操作
    如何逼自己成为一个上进的人?
    ubuntu16安装squid代理服务器
    李敖
  • 原文地址:https://www.cnblogs.com/Rowry/p/14305277.html
Copyright © 2011-2022 走看看