牛客网刷题-跳台阶

问题描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

输入描述:
输入台阶数

输出描述:
输出跳法个数

示例

示例1

输入
4

输出
5

解决思路

分析

  • 本地相对来说比较简单,主要是通过罗列次数跟台阶数的关系,得到表达式,从而解决
  • 通过罗列台阶树和跳法数可以发现如下关系: f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n-1) +f(n-2) f(n)=f(n1)+f(n2)
  • 我们可以通过递归或循环的方式实现

方法

  1. 通过递归
  2. 通过循环,需要注意,递增关系

代码实现

public class Solution {
    
    
    // f(n) = f(n-1) + f(n-2)
    // 递归
    public int JumpFloor(int target) {
    
    
        if (target == 1) {
    
    
            return 1;
        } else if (target == 2) {
    
    
            return 2;
        }
        return JumpFloor(target - 1) +  JumpFloor(target - 2);
    }

    // 循环
    public int JumpFloor2(int target) {
    
    
        int one = 0;// f(n-2)
        int two = 1;// f(n-1)

        while (target > 0) {
    
    
            two = one + two; // new two = f(n) = f(n-2) + f(n-1) = one + two
            one = two - one; // new one = f(n-1) = f(n) - f(n-2) = two - one
            target--;
        }

        return two;
    }
}

小伙伴如果想测试的话,可以直接到牛客网这个链接做测试

跳台阶-牛客网

猜你喜欢

转载自blog.csdn.net/qq_35398517/article/details/112796411