`

算法 跳台阶

阅读更多

跳台阶

 

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

 

解法一:

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

 

解法二:

public class Solution {
    public int JumpFloor(int target) { // 非递归
        if (target == 1) {
            return 1;
        }
        if (target == 2) {
            return 2;
        }
        int a = 1, b = 2, c = 0;
        for (int i = 3; i <= target; i++) {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
}

 

 

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

解法一:

public class Solution {
    public int JumpFloorII(int target) {
       if (target == 1) {
            return 1;
        }
        if (target == 2) {
            return 2;
        }
        int n = 1;
        for (int i = 1; i < target; i++) { // 递归
            n += JumpFloorII(target - i);
        }
        return n;
    }
     
    public int sum(int[] array, int start, int end) {
        int sum = 0;
        for (int i = start; i < end; i++) {
            sum += array[i];
        }
        return sum;
    }
}

 解法二:

public class Solution {
    public int JumpFloorII(int target) { // 动态规划
       if (target == 1) {
            return 1;
        }
        if (target == 2) {
            return 2;
        }
        int[] array = new int[target];
        array[0] = 1;
        array[1] = 2;
        for (int i = 3; i <= target; i++) {
            array[i - 1] = sum(array, 0, i - 1) + 1;
        }
        return array[target - 1];
    }
     
    public int sum(int[] array, int start, int end) {
        int sum = 0;
        for (int i = start; i < end; i++) {
            sum += array[i];
        }
        return sum;
    }
}

 

 

分享到:
评论

相关推荐

    青蛙为什么要跳台阶?C语言趣解青蛙跳台阶问题.pdf

    青蛙跳台阶问题不仅仅是一个简单的编程练习,它还揭示了动态规划和递归算法的精髓,如何通过数学归纳法推导出通项公式,以及在实现过程中对算法效率的考量。在IT行业,解决此类问题有助于提高编程能力和优化算法设计...

    基础算法-python青蛙跳台阶

    【基础算法】-python青蛙跳台阶 way = 0 def traceback(n, step_num): global way if n &gt; step_num: return if n == step_num: way += 1 return traceback(n+1, step_num) traceback(n+2, step_num) ...

    【算法题】青蛙跳台阶问题(附过程取模证明)

    综上所述,青蛙跳台阶问题是一个结合了动态规划和模运算的算法问题,其解法的关键在于理解递推关系并正确处理取模操作,以避免数值溢出。通过这样的方法,我们可以有效地计算出任何不超过100级台阶的跳法数量。

    HTML5变色弹球跳台阶小游戏.zip

    在这个“HTML5变色弹球跳台阶小游戏”中,我们看到的是HTML5与JavaScript(JS)相结合的一个典型应用,特别是标签中的"JS特效-其它代码"暗示了这个游戏主要依赖于JavaScript来实现各种动态效果。 首先,游戏的核心...

    迭代应用-上台阶诶算法

    上台阶算法,也被称为“楼梯问题”或“猴子上台阶问题”,是一个在计算机科学和算法设计中常见的问题,尤其在教育领域用作教学实例。它是一个典型的迭代应用,通过重复执行相同的操作步骤来逐步解决问题,这与递归或...

    C语言基础算法习题集 包括青蛙跳台阶 汉诺塔等分享给需要的同学

    C语言基础算法习题集 包括青蛙跳台阶 汉诺塔等分享给需要的同学 C Basic Algorithms Problem sets Introduction Here collect a set of Problems which about Algorithms, which are suitable for tyros to Practice...

    青蛙跳台阶问题1

    青蛙跳台阶问题是一个经典的动态规划问题,也与斐波那契数列有一定的联系。在这个问题中,我们假设一只青蛙要跳上一个具有 n 级台阶的楼梯,每次它可以跳 1 级或者 2 级。我们需要找出到达最高台阶的所有不同跳法的...

    Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法

    这篇文章主要介绍了在Python语言中解决三个经典的递归问题:跳台阶问题、变态跳台阶问题以及矩形覆盖问题。这三个问题虽然描述不同,但实际上都可以归结为斐波那契数列的变种。通过示例代码的形式,作者详细地介绍了...

    js代码-200607-跳台阶(DP)

    标题中的“js代码-200607-跳台阶(DP)”指的是一个JavaScript编程问题,关于“跳台阶”的动态规划(Dynamic Programming, DP)解法。在计算机科学和算法设计中,动态规划是一种有效解决最优化问题的方法,通过将大...

    c语言 跳台阶问题的解决方法

    跳台阶问题是一个经典的动态规划和递归问题,在C语言中可以通过循环或递归的方式来解决。这个问题的基本设定是:有一个含有n级台阶的楼梯,每次可以跳1级或2级,求解到达顶部的不同跳法数量。 首先,我们可以观察到...

    使用C++递归求解跳台阶问题

    跳台阶问题是一个经典的计算机科学问题,它涉及到递归算法的运用。在本问题中,一个楼梯有 n 级台阶,每次跳跃可以跳 1 级或 2 级。目标是找出到达顶层有多少种不同的跳法。这个问题可以通过数学分析和递归算法来...

    青蛙跳台阶和变态跳台阶

    【青蛙跳台阶问题】是经典的动态规划和递归算法题目,源自计算机科学中的组合数学问题。问题分为两类:常规的“青蛙跳台阶”和“变态跳台阶”。 在**常规的青蛙跳台阶问题**中,一只青蛙可以跳1级或2级台阶。如果要...

    js代码-200602-变态跳台阶

    标题中的“变态跳台阶”通常是指一个经典的编程问题,它源于动态规划的范畴。这个问题的基本版本是“青蛙跳台阶”,而“变态”可能指的是问题的变体或更复杂的规则。在标准版本中,一只青蛙一次可以跳一级或两级台阶...

    【Python学习-递归-斐波那契数列】【剑指offer】之跳台阶

    标题中的“【Python学习-递归-斐波那契数列】【剑指offer】之跳台阶”是指通过Python编程语言来学习递归方法,并通过解决一个经典的递归问题——跳台阶,来阐述这一概念。递归是编程中一种重要的算法,它通过函数...

    剑指offer刷题(九)变态跳台阶

    【变态跳台阶】问题是一个经典的递归问题,与斐波那契数列有着密切的联系。斐波那契数列是这样一个序列:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n &gt;= 2),其中每一项都是前两项的和。在变态跳台阶问题中,一...

    Java变态跳台阶实现思路和代码

    通过理解和解决Java变态跳台阶问题,我们不仅练习了递归和动态规划的技巧,还加深了对斐波那契序列和优化算法的理解。这个问题在编程面试中很常见,因此掌握其解题思路对于提升编程技能和面试准备非常有价值。

    利用简洁的C语言代码解决跳台阶问题与约瑟夫环问题

    跳台阶问题 题目: 一个台阶总共有 n 级,如果一次可以跳 1 级,也可以跳 2 级。 求总共有多少总跳法,并分析算法的时间复杂度。 分析: 也是比较基础的题目,通过递归可以方便的求解 代码实现如下(GCC编译通过):...

    程序员编程艺术:面试和算法心得.pdf

    o 2.2 寻找和为定值的两个数 o 2.3 寻找和为定值的多个数 o 2.4 最大连续子数组和 o 2.5 跳台阶 o 2.6 奇偶排序 o 2.7 荷兰国旗 o 2.8 矩阵相乘 o 2.9 完美洗牌 o 2.15 本章习题 第三章 树 o 3.0 本章导读 o 3.1 ...

Global site tag (gtag.js) - Google Analytics